opening_hours_converter 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/opening_hours_converter.rb +1 -0
- data/lib/opening_hours_converter/constants.rb +1 -0
- data/lib/opening_hours_converter/date_range.rb +12 -1
- data/lib/opening_hours_converter/interval.rb +1 -1
- data/lib/opening_hours_converter/opening_hours_builder.rb +43 -3
- data/lib/opening_hours_converter/opening_hours_date.rb +12 -1
- data/lib/opening_hours_converter/opening_hours_parser.rb +39 -10
- data/lib/opening_hours_converter/opening_hours_rule.rb +25 -6
- data/lib/opening_hours_converter/opening_hours_time.rb +1 -1
- data/lib/opening_hours_converter/wide_interval.rb +21 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4642911e8df98a01cfc414042dce0cc11e8c8908
|
4
|
+
data.tar.gz: 1b5ba34eba12a1a9fc8bcd9d9ab4cb4874898b01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 711db0af55afe9cab83cd7feb520a89c053887fd42e8cf1600204bdfb8b0d25c8c96af9dec8a4c7462bef5d0605677b555d0be9629d303bf7d7158fe622209a5
|
7
|
+
data.tar.gz: 8be38120b5040d1f285a31a1f35f17c9a7133d0314b82aedae2a68cf03f3ce4f51739ed8fb946f0b2be8622b28227bad169baba2782f3387be2c3b76b266a063
|
@@ -4,6 +4,7 @@ module OpeningHoursConverter
|
|
4
4
|
require_relative './opening_hours_converter/day'
|
5
5
|
require_relative './opening_hours_converter/week'
|
6
6
|
require_relative './opening_hours_converter/year'
|
7
|
+
require_relative './opening_hours_converter/public_holiday'
|
7
8
|
require_relative './opening_hours_converter/interval'
|
8
9
|
require_relative './opening_hours_converter/iterator'
|
9
10
|
require_relative './opening_hours_converter/opening_hours_builder'
|
@@ -28,7 +28,7 @@ module OpeningHoursConverter
|
|
28
28
|
else
|
29
29
|
@typical = OpeningHoursConverter::Week.new
|
30
30
|
end
|
31
|
-
|
31
|
+
else
|
32
32
|
@typical = OpeningHoursConverter::Week.new
|
33
33
|
end
|
34
34
|
end
|
@@ -45,5 +45,16 @@ module OpeningHoursConverter
|
|
45
45
|
def is_general_for?(date_range)
|
46
46
|
defines_typical_day? == date_range.defines_typical_day? && @wide_interval.contains?(date_range.wide_interval) && @comment == date_range.comment
|
47
47
|
end
|
48
|
+
|
49
|
+
def is_holiday?
|
50
|
+
result = false
|
51
|
+
result = @wide_interval.type == "holiday"
|
52
|
+
if !result
|
53
|
+
@typical.intervals.each do |i|
|
54
|
+
result = true if i.day_start == -2 && i.day_end == -2
|
55
|
+
end
|
56
|
+
end
|
57
|
+
result
|
58
|
+
end
|
48
59
|
end
|
49
60
|
end
|
@@ -3,7 +3,7 @@ require 'opening_hours_converter/constants'
|
|
3
3
|
module OpeningHoursConverter
|
4
4
|
class Interval
|
5
5
|
include Constants
|
6
|
-
|
6
|
+
attr_reader :day_start, :day_end, :start, :end
|
7
7
|
|
8
8
|
def initialize(day_start, min_start, day_end=0, min_end=0)
|
9
9
|
@day_start = day_start
|
@@ -10,9 +10,18 @@ module OpeningHoursConverter
|
|
10
10
|
oh_rule_added = nil
|
11
11
|
range_general = nil
|
12
12
|
range_general_for = nil
|
13
|
+
day_ph = false
|
13
14
|
|
14
15
|
date_ranges.each_with_index do |date_range, date_range_index|
|
16
|
+
|
15
17
|
if !date_range.nil?
|
18
|
+
date_range.typical.intervals.each_with_index do |interval, interval_id|
|
19
|
+
if interval&.day_start == -2 && interval&.day_start == interval&.day_end
|
20
|
+
date_range.typical.remove_interval(interval_id)
|
21
|
+
day_ph = true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
16
25
|
range_general = nil
|
17
26
|
range_general_for = nil
|
18
27
|
range_general_id = date_range_index - 1
|
@@ -28,8 +37,11 @@ module OpeningHoursConverter
|
|
28
37
|
end
|
29
38
|
range_general_id -= 1
|
30
39
|
end
|
40
|
+
|
31
41
|
if date_range_index == 0 || range_general.nil?
|
32
|
-
if date_range.
|
42
|
+
if date_range.wide_interval.type == "holiday"
|
43
|
+
oh_rules = build_holiday(date_range)
|
44
|
+
elsif date_range.defines_typical_week?
|
33
45
|
if !range_general_for.nil?
|
34
46
|
oh_rules = build_week_diff(date_range, date_ranges[range_general_for])
|
35
47
|
else
|
@@ -56,12 +68,24 @@ module OpeningHoursConverter
|
|
56
68
|
oh_rule_added = true
|
57
69
|
rescue Exception => e
|
58
70
|
puts e
|
59
|
-
|
71
|
+
if oh_rule.date[0].wide_type == "holiday" && oh_rule.date[0].wide.get_time_selector == "PH"
|
72
|
+
rules[rule_index].add_ph_weekday
|
73
|
+
oh_rule_added = true
|
74
|
+
elsif rules[rule_index].date[0].wide_type == "holiday" && rules[rule_index].date[0].wide.get_time_selector == "PH"
|
75
|
+
oh_rule.add_ph_weekday
|
76
|
+
rules[rule_index] = oh_rule
|
77
|
+
oh_rule_added = true
|
78
|
+
else
|
79
|
+
rule_index += 1
|
80
|
+
end
|
60
81
|
end
|
61
82
|
else
|
62
83
|
rule_index+=1
|
63
84
|
end
|
85
|
+
end
|
64
86
|
|
87
|
+
if day_ph
|
88
|
+
oh_rule.add_ph_weekday
|
65
89
|
end
|
66
90
|
|
67
91
|
if !oh_rule_added
|
@@ -81,7 +105,6 @@ module OpeningHoursConverter
|
|
81
105
|
end
|
82
106
|
end
|
83
107
|
end
|
84
|
-
# binding.pry
|
85
108
|
|
86
109
|
result = ""
|
87
110
|
rules.each_with_index do |rule, rule_index|
|
@@ -94,6 +117,22 @@ module OpeningHoursConverter
|
|
94
117
|
return result
|
95
118
|
end
|
96
119
|
|
120
|
+
def build_holiday(date_range)
|
121
|
+
intervals = date_range.typical.get_intervals(true)
|
122
|
+
|
123
|
+
rule = OpeningHoursConverter::OpeningHoursRule.new
|
124
|
+
date = OpeningHoursConverter::OpeningHoursDate.new(date_range.wide_interval, date_range.wide_interval.type, [-1])
|
125
|
+
rule.add_date(date)
|
126
|
+
|
127
|
+
intervals.each do |interval|
|
128
|
+
if !interval.nil?
|
129
|
+
rule.add_time(OpeningHoursConverter::OpeningHoursTime.new(interval.start, interval.end))
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
return [ rule ]
|
134
|
+
end
|
135
|
+
|
97
136
|
def build_day(date_range)
|
98
137
|
intervals = date_range.typical.get_intervals(true)
|
99
138
|
|
@@ -113,6 +152,7 @@ module OpeningHoursConverter
|
|
113
152
|
def build_week(date_range)
|
114
153
|
result = []
|
115
154
|
intervals = date_range.typical.get_intervals(true)
|
155
|
+
|
116
156
|
time_intervals = create_time_intervals(date_range.wide_interval, date_range.wide_interval.type, intervals)
|
117
157
|
|
118
158
|
monday0 = time_intervals[0]
|
@@ -3,7 +3,8 @@ require 'opening_hours_converter/constants'
|
|
3
3
|
module OpeningHoursConverter
|
4
4
|
class OpeningHoursDate
|
5
5
|
include Constants
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :weekdays, :weekdays_over
|
7
|
+
attr_reader :wide_type, :wide
|
7
8
|
|
8
9
|
def initialize(wide, wide_type, weekdays)
|
9
10
|
if wide.nil? || wide_type.nil? || weekdays.nil?
|
@@ -20,6 +21,12 @@ module OpeningHoursConverter
|
|
20
21
|
result = ""
|
21
22
|
wd = @weekdays.concat(@weekdays_over).sort.uniq
|
22
23
|
|
24
|
+
if wd.length > 0 && wd[0] == PH_WEEKDAY
|
25
|
+
result = "PH"
|
26
|
+
wd.shift
|
27
|
+
end
|
28
|
+
|
29
|
+
|
23
30
|
if wd.length > 0 && wd.include?(6) && wd.include?(0) && (wd.include?(5) || wd.include?(1))
|
24
31
|
start_we = 6
|
25
32
|
i = wd.length - 2
|
@@ -103,6 +110,10 @@ module OpeningHoursConverter
|
|
103
110
|
end
|
104
111
|
end
|
105
112
|
|
113
|
+
def add_ph_weekday
|
114
|
+
add_weekday(PH_WEEKDAY)
|
115
|
+
end
|
116
|
+
|
106
117
|
def add_overwritten_weekday(weekday)
|
107
118
|
unless @weekdays_over.include?(weekday) && @weekdays_over.include?(weekday)
|
108
119
|
@weekdays_over << weekday
|
@@ -3,7 +3,6 @@ require 'opening_hours_converter/constants'
|
|
3
3
|
module OpeningHoursConverter
|
4
4
|
class OpeningHoursParser
|
5
5
|
include Constants
|
6
|
-
attr_accessor :RGX_RULE_MODIFIER, :RGX_WEEK_KEY, :RGX_WEEK_VAL, :RGX_MONTH, :RGX_MONTHDAY, :RGX_TIME, :RGX_WEEKDAY, :RGX_HOLIDAY, :RGX_WD
|
7
6
|
def initialize
|
8
7
|
@RGX_RULE_MODIFIER = /^(open|closed|off)$/i
|
9
8
|
@RGX_WEEK_KEY = /^week$/
|
@@ -11,10 +10,11 @@ module OpeningHoursConverter
|
|
11
10
|
@RGX_MONTH = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(\-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))?\:?$/
|
12
11
|
@RGX_MONTHDAY = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([012]?[0-9]|3[01])(\-((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) )?([012]?[0-9]|3[01]))?\:?$/
|
13
12
|
@RGX_TIME = /^((([01]?[0-9]|2[01234])\:[012345][0-9](\-([01]?[0-9]|2[01234])\:[012345][0-9])?(,([01]?[0-9]|2[01234])\:[012345][0-9](\-([01]?[0-9]|2[01234])\:[012345][0-9])?)*)|(24\/7))$/
|
14
|
-
@RGX_WEEKDAY = /^(((Mo|Tu|We|Th|Fr|Sa|Su)(\-(Mo|Tu|We|Th|Fr|Sa|Su))?)|(PH
|
13
|
+
@RGX_WEEKDAY = /^(((Mo|Tu|We|Th|Fr|Sa|Su)(\-(Mo|Tu|We|Th|Fr|Sa|Su))?)|(PH))(,(((Mo|Tu|We|Th|Fr|Sa|Su)(\-(Mo|Tu|We|Th|Fr|Sa|Su))?)|(PH)))*$/
|
15
14
|
@RGX_HOLIDAY = /^(PH|SH|easter)$/
|
16
15
|
@RGX_WD = /^(Mo|Tu|We|Th|Fr|Sa|Su)(\-(Mo|Tu|We|Th|Fr|Sa|Su))?$/
|
17
16
|
@RGX_YEAR = /^(\d{4})(\-(\d{4}))?$/
|
17
|
+
@RGX_YEAR_PH = /^(\d{4})( PH|(\-(\d{4}) PH))\:?$/
|
18
18
|
@RGX_YEAR_MONTH_DAY = /^(\d{4}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([012]?[0-9]|3[01])(\-((\d{4}) )?((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) )?([012]?[0-9]|3[01]))?\:?$/
|
19
19
|
@RGX_YEAR_MONTH = /^(\d{4}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(\-((\d{4}) )?((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)))?\:?$/
|
20
20
|
@RGX_COMMENT = /^\"[^\"]*\"$/
|
@@ -71,18 +71,20 @@ module OpeningHoursConverter
|
|
71
71
|
|
72
72
|
# get weekdays selector
|
73
73
|
weekdays = []
|
74
|
+
holidays = []
|
74
75
|
if time_selector == "24/7"
|
75
76
|
weekdays << {from: 0, to: 6}
|
76
|
-
elsif current_token >= 0 && is_weekday?(tokens[current_token])
|
77
|
+
elsif current_token >= 0 && is_weekday?(tokens[current_token]) && (@RGX_YEAR_PH =~ "#{tokens[current_token-1]} #{tokens[current_token]}").nil?
|
77
78
|
weekday_selector = tokens[current_token]
|
78
|
-
|
79
|
+
weekdays_and_holidays = get_weekdays(weekday_selector)
|
80
|
+
weekdays = weekdays_and_holidays[:weekdays]
|
81
|
+
holidays = weekdays_and_holidays[:holidays]
|
79
82
|
current_token -= 1
|
80
83
|
end
|
81
84
|
|
82
85
|
months = []
|
83
86
|
years = []
|
84
87
|
if current_token >= 0
|
85
|
-
|
86
88
|
wide_range_selector = tokens[0]
|
87
89
|
for i in 1..current_token
|
88
90
|
wide_range_selector += " #{tokens[i]}"
|
@@ -97,6 +99,8 @@ module OpeningHoursConverter
|
|
97
99
|
years << get_year_month(wrs)
|
98
100
|
elsif !(@RGX_MONTHDAY =~ wrs).nil?
|
99
101
|
months << get_month_day(wrs)
|
102
|
+
elsif !(@RGX_YEAR_PH =~ wrs).nil?
|
103
|
+
holidays << get_year_holiday(wrs)
|
100
104
|
elsif !(@RGX_MONTH =~ wrs).nil?
|
101
105
|
months << get_month(wrs)
|
102
106
|
elsif !(@RGX_YEAR =~ wrs).nil?
|
@@ -116,7 +120,6 @@ module OpeningHoursConverter
|
|
116
120
|
# puts "times : #{times}"
|
117
121
|
# puts "years : #{years}"
|
118
122
|
# puts "rule_modifier : #{rule_modifier}"
|
119
|
-
|
120
123
|
date_ranges = []
|
121
124
|
if months.length > 0
|
122
125
|
months.each do |month|
|
@@ -137,6 +140,14 @@ module OpeningHoursConverter
|
|
137
140
|
date_ranges << date_range
|
138
141
|
end
|
139
142
|
end
|
143
|
+
elsif holidays.length > 0 && weekdays.length == 0
|
144
|
+
holidays.each do |holiday|
|
145
|
+
if holiday == "PH"
|
146
|
+
date_ranges << WideInterval.new.holiday(holiday)
|
147
|
+
elsif holiday[:holiday] == "PH"
|
148
|
+
date_ranges << WideInterval.new.holiday(holiday[:holiday], holiday[:start], holiday[:end])
|
149
|
+
end
|
150
|
+
end
|
140
151
|
elsif years.length > 0
|
141
152
|
years.each do |year|
|
142
153
|
if !year[:from_day].nil?
|
@@ -166,10 +177,13 @@ module OpeningHoursConverter
|
|
166
177
|
date_ranges << OpeningHoursConverter::WideInterval.new.always
|
167
178
|
end
|
168
179
|
|
180
|
+
if weekdays.length > 0 && holidays.length > 0
|
181
|
+
weekdays << {from: -2, to: -2}
|
182
|
+
holidays = []
|
183
|
+
end
|
169
184
|
if weekdays.length == 0
|
170
185
|
weekdays << {from: 0, to: OSM_DAYS.length - 1}
|
171
186
|
end
|
172
|
-
|
173
187
|
if times.length == 0
|
174
188
|
times << {from: 0, to: 24*60}
|
175
189
|
end
|
@@ -239,8 +253,6 @@ module OpeningHoursConverter
|
|
239
253
|
add_interval(dr_obj.typical, weekdays[wd_id], times[t_id])
|
240
254
|
end
|
241
255
|
end
|
242
|
-
|
243
|
-
|
244
256
|
end
|
245
257
|
end
|
246
258
|
end
|
@@ -328,6 +340,17 @@ module OpeningHoursConverter
|
|
328
340
|
{ from_month: year_month_from, to_month: year_month_to }
|
329
341
|
end
|
330
342
|
|
343
|
+
def get_year_holiday(wrs)
|
344
|
+
single_year = wrs.gsub(/\:$/, '').split('-')
|
345
|
+
if single_year.length == 1
|
346
|
+
return { holiday: single_year[0].split(' ')[1], start: single_year[0].split(' ')[0] }
|
347
|
+
elsif single_year.length == 2
|
348
|
+
return { holiday: single_year[1].split(' ')[1], start: single_year[0], end: single_year[1].split(' ')[0] }
|
349
|
+
else
|
350
|
+
raise ArgumentError, "Invalid year_holiday : #{wrs.inspect}"
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
331
354
|
def get_year_month_day(wrs)
|
332
355
|
single_year_month_day = wrs.gsub(/\:$/, '').split('-')
|
333
356
|
year_month_day_from = single_year_month_day[0].split(' ')
|
@@ -385,6 +408,7 @@ module OpeningHoursConverter
|
|
385
408
|
end
|
386
409
|
|
387
410
|
def get_weekdays(weekday_selector)
|
411
|
+
holidays = []
|
388
412
|
weekdays = []
|
389
413
|
wd_from = nil
|
390
414
|
wd_to = nil
|
@@ -392,8 +416,10 @@ module OpeningHoursConverter
|
|
392
416
|
weekday_selector = weekday_selector.split(',')
|
393
417
|
weekday_selector.each do |wd|
|
394
418
|
if !(@RGX_HOLIDAY =~ wd).nil?
|
419
|
+
holidays << wd
|
395
420
|
elsif !(@RGX_WD =~ wd).nil?
|
396
421
|
single_weekday = wd.split('-')
|
422
|
+
|
397
423
|
wd_from = OSM_DAYS.find_index(single_weekday[0])
|
398
424
|
if single_weekday.length > 1
|
399
425
|
wd_to = OSM_DAYS.find_index(single_weekday[1])
|
@@ -407,7 +433,7 @@ module OpeningHoursConverter
|
|
407
433
|
end
|
408
434
|
end
|
409
435
|
|
410
|
-
weekdays
|
436
|
+
{ weekdays: weekdays, holidays: holidays }
|
411
437
|
end
|
412
438
|
|
413
439
|
def remove_interval(typical, weekdays, times)
|
@@ -496,6 +522,9 @@ module OpeningHoursConverter
|
|
496
522
|
def is_comment?(token)
|
497
523
|
!(@RGX_COMMENT =~ token).nil?
|
498
524
|
end
|
525
|
+
def is_holiday?(token)
|
526
|
+
!(@RGX_HOLIDAY =~ token).nil?
|
527
|
+
end
|
499
528
|
def is_rule_modifier?(token)
|
500
529
|
!(@RGX_RULE_MODIFIER =~ token).nil?
|
501
530
|
end
|
@@ -13,7 +13,15 @@ module OpeningHoursConverter
|
|
13
13
|
|
14
14
|
def get
|
15
15
|
result = ""
|
16
|
-
if @date.length
|
16
|
+
if @date.length == 1 && @date[0].wide_type == "holiday"
|
17
|
+
if !@date[0].wide.start[:year].nil?
|
18
|
+
result += @date[0].wide.start[:year]
|
19
|
+
end
|
20
|
+
if !@date[0].wide.end.nil?
|
21
|
+
result += "-#{@date[0].wide.end[:year]}"
|
22
|
+
end
|
23
|
+
result += " PH"
|
24
|
+
elsif @date.length > 0
|
17
25
|
result += get_wide_selector
|
18
26
|
end
|
19
27
|
|
@@ -23,10 +31,9 @@ module OpeningHoursConverter
|
|
23
31
|
result += " #{wd}"
|
24
32
|
end
|
25
33
|
end
|
26
|
-
|
27
34
|
if @time.length > 0
|
28
35
|
result += " "
|
29
|
-
@time.each_with_index do |t, i|
|
36
|
+
@time.uniq.each_with_index do |t, i|
|
30
37
|
if (i > 0)
|
31
38
|
result += ","
|
32
39
|
end
|
@@ -265,6 +272,12 @@ module OpeningHoursConverter
|
|
265
272
|
end
|
266
273
|
end
|
267
274
|
|
275
|
+
def add_ph_weekday
|
276
|
+
@date.each do |d|
|
277
|
+
d.add_ph_weekday
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
268
281
|
def add_overwritten_weekday(weekday)
|
269
282
|
@date.each do |d|
|
270
283
|
d.add_overwritten_weekday(weekday)
|
@@ -285,11 +298,17 @@ module OpeningHoursConverter
|
|
285
298
|
end
|
286
299
|
end
|
287
300
|
|
301
|
+
def include_time?(time)
|
302
|
+
@time.each do |t|
|
303
|
+
return true if t.start == time.start && t.end == time.end
|
304
|
+
end
|
305
|
+
return false
|
306
|
+
end
|
307
|
+
|
288
308
|
def add_time(time)
|
289
|
-
|
309
|
+
|
310
|
+
if (@time.length == 0 || @time[0].get != "off") && !include_time?(time)
|
290
311
|
@time << time
|
291
|
-
else
|
292
|
-
raise ArgumentError, "This time can't be added to this rule"
|
293
312
|
end
|
294
313
|
end
|
295
314
|
|
@@ -35,6 +35,11 @@ module OpeningHoursConverter
|
|
35
35
|
if !@end.nil?
|
36
36
|
result += "-#{@end[:year]}"
|
37
37
|
end
|
38
|
+
when "holiday"
|
39
|
+
result = "#{@start[:year].nil? ? "" : "#{@start[:year]} "}PH"
|
40
|
+
if !@end.nil?
|
41
|
+
result = "#{@start[:year]}#{@start[:year] == @end[:year] ? "" : "-#{@end[:year]}"} PH"
|
42
|
+
end
|
38
43
|
when "always"
|
39
44
|
result = ""
|
40
45
|
else
|
@@ -122,6 +127,18 @@ module OpeningHoursConverter
|
|
122
127
|
self
|
123
128
|
end
|
124
129
|
|
130
|
+
def holiday(holiday, start_year=nil, end_year=nil)
|
131
|
+
if holiday.nil? || holiday != "PH"
|
132
|
+
raise(ArgumentError, "holiday is required and can only be PH")
|
133
|
+
end
|
134
|
+
@start = { holiday: holiday, year: start_year }
|
135
|
+
unless end_year.nil? || end_year == start_year
|
136
|
+
@end = { holiday: holiday, year: end_year }
|
137
|
+
end
|
138
|
+
@type = "holiday"
|
139
|
+
self
|
140
|
+
end
|
141
|
+
|
125
142
|
def always
|
126
143
|
@start = nil
|
127
144
|
@end = nil
|
@@ -244,6 +261,10 @@ module OpeningHoursConverter
|
|
244
261
|
def equals(o)
|
245
262
|
return false unless o.instance_of?(OpeningHoursConverter::WideInterval)
|
246
263
|
return @type == "always" if o.type == "always"
|
264
|
+
if @type == "holiday"
|
265
|
+
return (o.type == "holiday" && (@start[:year] == o.start[:year]) &&
|
266
|
+
(@end.nil? && o.end.nil? || (@end && o.end && @end[:year] == o.end[:year])))
|
267
|
+
end
|
247
268
|
return false if @type == "always"
|
248
269
|
self_to_day = to_day
|
249
270
|
o_to_day = o.to_day
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opening_hours_converter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ziserman Martin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Datetime range to openinghours, openinghours to datetime range. Very
|
14
14
|
strongly inspired by yohours.
|