From 50cb6eca570a352a3b9799a66f77edad261763be Mon Sep 17 00:00:00 2001 From: Aleksei Lipniagov Date: Wed, 11 Sep 2019 18:32:24 +0000 Subject: Use 'gitlab_chronic_duration' gem Replace 'chronic_duration' to 'gitlab_chronic_duration', to make relevant method calls thread-safe. --- lib/gitlab/patch/chronic_duration.rb | 35 -------------------------- lib/gitlab/time_tracking_formatter.rb | 47 ++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 58 deletions(-) delete mode 100644 lib/gitlab/patch/chronic_duration.rb (limited to 'lib') diff --git a/lib/gitlab/patch/chronic_duration.rb b/lib/gitlab/patch/chronic_duration.rb deleted file mode 100644 index ab3cba3657f..00000000000 --- a/lib/gitlab/patch/chronic_duration.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -# Fixes a bug where parsing months doesn't take into account -# the ChronicDuration.days_per_week setting -# -# We can remove this when we do a refactor and push upstream in -# https://gitlab.com/gitlab-org/gitlab-ce/issues/66637 - -module Gitlab - module Patch - module ChronicDuration - extend ActiveSupport::Concern - - class_methods do - def duration_units_seconds_multiplier(unit) - return 0 unless duration_units_list.include?(unit) - - case unit - when 'months' - 3600 * ::ChronicDuration.hours_per_day * ::ChronicDuration.days_per_month - else - super - end - end - - # ChronicDuration#output uses 1mo = 4w as the conversion so we do the same here. - # We do need to add a special case for the default days_per_week value because - # we want to retain existing behavior for the default case - def days_per_month - ::ChronicDuration.days_per_week == 7 ? 30 : ::ChronicDuration.days_per_week * 4 - end - end - end - end -end diff --git a/lib/gitlab/time_tracking_formatter.rb b/lib/gitlab/time_tracking_formatter.rb index 302da91328a..31883527135 100644 --- a/lib/gitlab/time_tracking_formatter.rb +++ b/lib/gitlab/time_tracking_formatter.rb @@ -4,37 +4,38 @@ module Gitlab module TimeTrackingFormatter extend self - def parse(string) - with_custom_config do - string = string.sub(/\A-/, '') + # We may want to configure it through project settings in a future version. + CUSTOM_DAY_AND_WEEK_LENGTH = { hours_per_day: 8, days_per_month: 20 }.freeze - seconds = ChronicDuration.parse(string, default_unit: 'hours') rescue nil - seconds *= -1 if seconds && Regexp.last_match - seconds - end + def parse(string) + string = string.sub(/\A-/, '') + + seconds = + begin + ChronicDuration.parse( + string, + CUSTOM_DAY_AND_WEEK_LENGTH.merge(default_unit: 'hours')) + rescue + nil + end + + seconds *= -1 if seconds && Regexp.last_match + seconds end def output(seconds) - with_custom_config do - ChronicDuration.output(seconds, format: :short, limit_to_hours: limit_to_hours_setting, weeks: true) rescue nil - end + ChronicDuration.output( + seconds, + CUSTOM_DAY_AND_WEEK_LENGTH.merge( + format: :short, + limit_to_hours: limit_to_hours_setting, + weeks: true)) + rescue + nil end private - def with_custom_config - # We may want to configure it through project settings in a future version. - ChronicDuration.hours_per_day = 8 - ChronicDuration.days_per_week = 5 - - result = yield - - ChronicDuration.hours_per_day = 24 - ChronicDuration.days_per_week = 7 - - result - end - def limit_to_hours_setting Gitlab::CurrentSettings.time_tracking_limit_to_hours end -- cgit v1.2.3