From 7cd401b405926df6bc5f1105fb332c156cdb0e23 Mon Sep 17 00:00:00 2001 From: Marius Balteanu Date: Sun, 24 Oct 2021 10:45:24 +0000 Subject: [PATCH] Extract @Shell@ and @DateCalculation@ classes from @lib/redmine/utils.rb@ to their own files (#29914, #32938). git-svn-id: http://svn.redmine.org/redmine/trunk@21260 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/utils.rb | 83 +------------------------- lib/redmine/utils/date_calculation.rb | 84 +++++++++++++++++++++++++++ lib/redmine/utils/shell.rb | 43 ++++++++++++++ 3 files changed, 129 insertions(+), 81 deletions(-) create mode 100644 lib/redmine/utils/date_calculation.rb create mode 100644 lib/redmine/utils/shell.rb diff --git a/lib/redmine/utils.rb b/lib/redmine/utils.rb index 1954499ef..2a8a04443 100644 --- a/lib/redmine/utils.rb +++ b/lib/redmine/utils.rb @@ -17,6 +17,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +require File.dirname(__FILE__) + '/utils/date_calculation' +require File.dirname(__FILE__) + '/utils/shell' require 'fileutils' module Redmine @@ -66,86 +68,5 @@ module Redmine end end end - - module Shell - module_function - - def shell_quote(str) - if Redmine::Platform.mswin? - '"' + str.gsub(/"/, '\\"') + '"' - else - "'" + str.gsub(/'/, "'\"'\"'") + "'" - end - end - - def shell_quote_command(command) - if Redmine::Platform.mswin? && RUBY_PLATFORM == 'java' - command - else - shell_quote(command) - end - end - end - - module DateCalculation - # Returns the number of working days between from and to - def working_days(from, to) - days = (to - from).to_i - if days > 0 - weeks = days / 7 - result = weeks * (7 - non_working_week_days.size) - days_left = days - weeks * 7 - start_cwday = from.cwday - days_left.times do |i| - unless non_working_week_days.include?(((start_cwday + i - 1) % 7) + 1) - result += 1 - end - end - result - else - 0 - end - end - - # Adds working days to the given date - def add_working_days(date, working_days) - if working_days > 0 - weeks = working_days / (7 - non_working_week_days.size) - result = weeks * 7 - days_left = working_days - weeks * (7 - non_working_week_days.size) - cwday = date.cwday - while days_left > 0 - cwday += 1 - unless non_working_week_days.include?(((cwday - 1) % 7) + 1) - days_left -= 1 - end - result += 1 - end - next_working_date(date + result) - else - date - end - end - - # Returns the date of the first day on or after the given date that is a working day - def next_working_date(date) - cwday = date.cwday - days = 0 - days += 1 while non_working_week_days.include?(((cwday + days - 1) % 7) + 1) - date + days - end - - # Returns the index of non working week days (1=monday, 7=sunday) - def non_working_week_days - @non_working_week_days ||= begin - days = Setting.non_working_week_days - if days.is_a?(Array) && days.size < 7 - days.map(&:to_i) - else - [] - end - end - end - end end end diff --git a/lib/redmine/utils/date_calculation.rb b/lib/redmine/utils/date_calculation.rb new file mode 100644 index 000000000..58370bb86 --- /dev/null +++ b/lib/redmine/utils/date_calculation.rb @@ -0,0 +1,84 @@ +# frozen_string_literal: true + +# Redmine - project management software +# Copyright (C) 2006-2021 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +module Redmine + module Utils + module DateCalculation + # Returns the number of working days between from and to + def working_days(from, to) + days = (to - from).to_i + if days > 0 + weeks = days / 7 + result = weeks * (7 - non_working_week_days.size) + days_left = days - weeks * 7 + start_cwday = from.cwday + days_left.times do |i| + unless non_working_week_days.include?(((start_cwday + i - 1) % 7) + 1) + result += 1 + end + end + result + else + 0 + end + end + + # Adds working days to the given date + def add_working_days(date, working_days) + if working_days > 0 + weeks = working_days / (7 - non_working_week_days.size) + result = weeks * 7 + days_left = working_days - weeks * (7 - non_working_week_days.size) + cwday = date.cwday + while days_left > 0 + cwday += 1 + unless non_working_week_days.include?(((cwday - 1) % 7) + 1) + days_left -= 1 + end + result += 1 + end + next_working_date(date + result) + else + date + end + end + + # Returns the date of the first day on or after the given date that is a working day + def next_working_date(date) + cwday = date.cwday + days = 0 + days += 1 while non_working_week_days.include?(((cwday + days - 1) % 7) + 1) + date + days + end + + # Returns the index of non working week days (1=monday, 7=sunday) + def non_working_week_days + @non_working_week_days ||= begin + days = Setting.non_working_week_days + if days.is_a?(Array) && days.size < 7 + days.map(&:to_i) + else + [] + end + end + end + end + end +end diff --git a/lib/redmine/utils/shell.rb b/lib/redmine/utils/shell.rb new file mode 100644 index 000000000..2126441e5 --- /dev/null +++ b/lib/redmine/utils/shell.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +# Redmine - project management software +# Copyright (C) 2006-2021 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +module Redmine + module Utils + module Shell + module_function + + def shell_quote(str) + if Redmine::Platform.mswin? + '"' + str.gsub(/"/, '\\"') + '"' + else + "'" + str.gsub(/'/, "'\"'\"'") + "'" + end + end + + def shell_quote_command(command) + if Redmine::Platform.mswin? && RUBY_PLATFORM == 'java' + command + else + shell_quote(command) + end + end + end + end +end -- 2.39.5