blob: 2eca87347b11c21da4d80b20cee933b128af2063 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# frozen_string_literal: true
module Gitlab
module QuickActions
class TimelineTextAndDateTimeSeparator
DATETIME_REGEX = %r{(\d{2,4}[\-.]\d{1,2}[\-.]\d{1,2} \d{1,2}:\d{2})}
MIXED_DELIMITER = %r{([/.])}
TIME_REGEX = %r{(\d{1,2}:\d{2})}
def initialize(timeline_event_arg)
@timeline_event_arg = timeline_event_arg
@timeline_text = get_text
@timeline_date_string = get_raw_date_string
end
def execute
return if @timeline_event_arg.blank?
return if date_contains_mixed_delimiters?
return [@timeline_text, get_current_date_time] unless date_time_present?
return unless valid_date?
[@timeline_text, get_actual_date_time]
end
private
def get_text
@timeline_event_arg.split('|')[0]&.strip
end
def get_raw_date_string
@timeline_event_arg.split('|')[1]&.strip
end
def get_current_date_time
DateTime.current.strftime("%Y-%m-%d %H:%M:00 UTC")
end
def get_actual_date_time
DateTime.parse(@timeline_date_string)
end
def date_time_present?
DATETIME_REGEX =~ @timeline_date_string || TIME_REGEX =~ @timeline_date_string
end
def date_contains_mixed_delimiters?
MIXED_DELIMITER =~ @timeline_date_string
end
def valid_date?
get_actual_date_time
rescue Date::Error
nil
end
end
end
end
|