opening_hours_converter 1.7.20 → 1.8.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/date_range.rb +19 -20
- data/lib/opening_hours_converter/day.rb +48 -42
- data/lib/opening_hours_converter/interval.rb +12 -1
- data/lib/opening_hours_converter/opening_hours_builder.rb +9 -10
- data/lib/opening_hours_converter/opening_hours_date.rb +6 -7
- data/lib/opening_hours_converter/opening_hours_rule.rb +6 -6
- data/lib/opening_hours_converter/wide_interval.rb +0 -1
- data/lib/opening_hours_converter/year.rb +10 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50b769d524ea032bea248de2b6dded3bfd944f3f3402f4213ef160075f4c68e6
|
4
|
+
data.tar.gz: 64ca508b6a8d07c9354e22c3371a1a51d77452eba94d2d5826f133ce26591e37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a86e27cd5699f95e1bd25559b22df74255f3efffbf9b7b5b4a1227a4a95bb80bf69f0249c9a76a283b9ae05697cb33aceafc47eec63477ffa95c8544274790e
|
7
|
+
data.tar.gz: 320f7a39295e8a9c29cf33f002e3cf03436a9b91d027320af3ce96114f8dbf9899a08b30b2e95fd2c6d423d6f1a68d8c516c5aa07bda2c58155b9323728415e2
|
@@ -2,11 +2,11 @@ module OpeningHoursConverter
|
|
2
2
|
class DateRange
|
3
3
|
attr_accessor :wide_interval, :typical, :comment
|
4
4
|
|
5
|
-
def initialize(
|
5
|
+
def initialize(wide_interval = nil)
|
6
6
|
@wide_interval = nil
|
7
7
|
@typical = nil
|
8
|
-
@comment =
|
9
|
-
update_range(
|
8
|
+
@comment = ''
|
9
|
+
update_range(wide_interval)
|
10
10
|
end
|
11
11
|
|
12
12
|
def defines_typical_day?
|
@@ -17,24 +17,24 @@ module OpeningHoursConverter
|
|
17
17
|
@typical.instance_of?(OpeningHoursConverter::Week)
|
18
18
|
end
|
19
19
|
|
20
|
-
def update_range(
|
21
|
-
@wide_interval = !
|
20
|
+
def update_range(wide_interval)
|
21
|
+
@wide_interval = !wide_interval.nil? ? wide_interval : OpeningHoursConverter::WideInterval.new.always
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
23
|
+
return unless @typical.nil?
|
24
|
+
|
25
|
+
@typical = case @wide_interval.type
|
26
|
+
when 'day'
|
27
|
+
if @wide_interval.end.nil?
|
28
|
+
OpeningHoursConverter::Day.new
|
29
|
+
else
|
30
|
+
OpeningHoursConverter::Week.new
|
31
|
+
end
|
32
|
+
else
|
33
|
+
OpeningHoursConverter::Week.new
|
34
|
+
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def add_comment(comment=
|
37
|
+
def add_comment(comment = '')
|
38
38
|
@comment += comment if comment
|
39
39
|
end
|
40
40
|
|
@@ -47,8 +47,7 @@ module OpeningHoursConverter
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def is_holiday?
|
50
|
-
result =
|
51
|
-
result = @wide_interval.type == "holiday"
|
50
|
+
result = @wide_interval.type == 'holiday'
|
52
51
|
if !result
|
53
52
|
@typical.intervals.each do |i|
|
54
53
|
if !i.nil?
|
@@ -13,60 +13,46 @@ module OpeningHoursConverter
|
|
13
13
|
minute_array = Array.new(MINUTES_MAX + 1, false)
|
14
14
|
|
15
15
|
@intervals.each do |interval|
|
16
|
-
if
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
elsif interval.day_start == interval.day_end || interval.day_end == DAYS_MAX && interval.end == MINUTES_MAX
|
25
|
-
start_minute = interval.start
|
26
|
-
end_minute = interval.end
|
27
|
-
elsif interval.day_end == interval.day_start + 1 && interval.end == 0
|
28
|
-
start_minute = interval.start
|
29
|
-
end_minute = MINUTES_MAX
|
30
|
-
end
|
31
|
-
|
32
|
-
unless start_minute.nil? && end_minute.nil?
|
33
|
-
for minute in start_minute..end_minute
|
34
|
-
minute_array[minute] = off ? "off" : true
|
35
|
-
end
|
36
|
-
else
|
37
|
-
raise "Invalid interval #{interval.inspect}"
|
38
|
-
end
|
16
|
+
next if interval.nil?
|
17
|
+
|
18
|
+
off, start_minute, end_minute = handle_interval(interval)
|
19
|
+
|
20
|
+
raise "Invalid interval #{interval.inspect}" if start_minute.nil? && end_minute.nil?
|
21
|
+
|
22
|
+
(start_minute..end_minute).step do |minute|
|
23
|
+
minute_array[minute] = off ? 'off' : true
|
39
24
|
end
|
40
25
|
end
|
41
26
|
|
42
27
|
minute_array
|
43
28
|
end
|
44
29
|
|
45
|
-
def
|
30
|
+
def handle_interval(interval)
|
31
|
+
off = interval.is_off
|
32
|
+
|
33
|
+
if off
|
34
|
+
start_minute = 0
|
35
|
+
end_minute = MINUTES_MAX
|
36
|
+
elsif interval.single_day? || interval.max?
|
37
|
+
start_minute = interval.start
|
38
|
+
end_minute = interval.end
|
39
|
+
elsif interval.single_day_end_at_midnight?
|
40
|
+
start_minute = interval.start
|
41
|
+
end_minute = MINUTES_MAX
|
42
|
+
end
|
43
|
+
|
44
|
+
[off, start_minute, end_minute]
|
45
|
+
end
|
46
|
+
|
47
|
+
def get_intervals(clean = false)
|
46
48
|
if clean
|
47
49
|
minute_array = get_as_minute_array
|
48
50
|
intervals = []
|
49
51
|
minute_start = -1
|
50
|
-
minute_end = nil
|
51
52
|
off = false
|
52
53
|
|
53
54
|
minute_array.each_with_index do |minute, i|
|
54
|
-
|
55
|
-
off = true if minute == "off"
|
56
|
-
minute_start = i
|
57
|
-
elsif i == minute_array.length - 1 && minute
|
58
|
-
intervals << OpeningHoursConverter::Interval.new(0, minute_start, 0, i - 1, off)
|
59
|
-
minute_start = -1
|
60
|
-
off = false
|
61
|
-
else
|
62
|
-
if minute && minute_start < 0
|
63
|
-
minute_start = i
|
64
|
-
elsif !minute && minute_start >= 0
|
65
|
-
intervals << OpeningHoursConverter::Interval.new(0, minute_start, 0, i - 1, off)
|
66
|
-
minute_start = -1
|
67
|
-
off = false
|
68
|
-
end
|
69
|
-
end
|
55
|
+
off, minute_start, intervals = handle_minute(minute, off, minute_start, intervals, i, minute_array)
|
70
56
|
end
|
71
57
|
intervals
|
72
58
|
else
|
@@ -74,9 +60,29 @@ module OpeningHoursConverter
|
|
74
60
|
end
|
75
61
|
end
|
76
62
|
|
63
|
+
def handle_minute(minute, off, minute_start, intervals, i, minute_array)
|
64
|
+
if minute
|
65
|
+
if i == 0
|
66
|
+
off = true if minute == 'off'
|
67
|
+
minute_start = i
|
68
|
+
elsif minute_start < 0
|
69
|
+
minute_start = i
|
70
|
+
elsif i == minute_array.length - 1
|
71
|
+
intervals << OpeningHoursConverter::Interval.new(0, minute_start, 0, i - 1, off)
|
72
|
+
minute_start = -1
|
73
|
+
off = false
|
74
|
+
end
|
75
|
+
elsif minute_start >= 0
|
76
|
+
intervals << OpeningHoursConverter::Interval.new(0, minute_start, 0, i - 1, off)
|
77
|
+
minute_start = -1
|
78
|
+
off = false
|
79
|
+
end
|
80
|
+
[off, minute_start, intervals]
|
81
|
+
end
|
82
|
+
|
77
83
|
def add_interval(interval)
|
78
84
|
@intervals << interval
|
79
|
-
|
85
|
+
@intervals.length - 1
|
80
86
|
end
|
81
87
|
|
82
88
|
def edit_interval(id, interval)
|
@@ -6,7 +6,6 @@ module OpeningHoursConverter
|
|
6
6
|
attr_reader :day_start, :day_end, :start, :end, :is_off
|
7
7
|
|
8
8
|
def initialize(day_start, min_start, day_end=0, min_end=0, is_off=false)
|
9
|
-
|
10
9
|
@day_start = day_start
|
11
10
|
@day_end = day_end
|
12
11
|
@start = min_start
|
@@ -18,5 +17,17 @@ module OpeningHoursConverter
|
|
18
17
|
@end = MINUTES_MAX
|
19
18
|
end
|
20
19
|
end
|
20
|
+
|
21
|
+
def single_day?
|
22
|
+
@day_start == @day_end
|
23
|
+
end
|
24
|
+
|
25
|
+
def max?
|
26
|
+
@day_end == DAYS_MAX && @end == MINUTES_MAX
|
27
|
+
end
|
28
|
+
|
29
|
+
def single_day_end_at_midnight?
|
30
|
+
@day_end == @day_start + 1 && @end == 0
|
31
|
+
end
|
21
32
|
end
|
22
33
|
end
|
@@ -77,10 +77,10 @@ module OpeningHoursConverter
|
|
77
77
|
oh_rule_added = true
|
78
78
|
rescue Exception => e
|
79
79
|
puts e
|
80
|
-
if oh_rule.date[0].
|
80
|
+
if oh_rule.date[0].wide_interval.type == "holiday" && oh_rule.date[0].wide_interval.get_time_selector == "PH"
|
81
81
|
rules[rule_index].add_ph_weekday
|
82
82
|
oh_rule_added = true
|
83
|
-
elsif rules[rule_index].date[0].
|
83
|
+
elsif rules[rule_index].date[0].wide_interval.type == "holiday" && rules[rule_index].date[0].wide_interval.get_time_selector == "PH"
|
84
84
|
oh_rule.add_ph_weekday
|
85
85
|
rules[rule_index] = oh_rule
|
86
86
|
oh_rule_added = true
|
@@ -110,7 +110,7 @@ module OpeningHoursConverter
|
|
110
110
|
oh_rule_over = OpeningHoursConverter::OpeningHoursRule.new
|
111
111
|
|
112
112
|
oh_rule.date.each do |date|
|
113
|
-
oh_rule_over.add_date(OpeningHoursConverter::OpeningHoursDate.new(date.
|
113
|
+
oh_rule_over.add_date(OpeningHoursConverter::OpeningHoursDate.new(date.wide_interval, date.weekdays_over))
|
114
114
|
end
|
115
115
|
oh_rule_over.add_time(OpeningHoursConverter::OpeningHoursTime.new)
|
116
116
|
oh_rules << oh_rule_over
|
@@ -141,7 +141,7 @@ module OpeningHoursConverter
|
|
141
141
|
date_range = OpeningHoursConverter::DateRange.new(OpeningHoursConverter::WideInterval.new.holiday("PH", start_year, end_year))
|
142
142
|
|
143
143
|
rule = OpeningHoursConverter::OpeningHoursRule.new
|
144
|
-
date = OpeningHoursConverter::OpeningHoursDate.new(date_range.wide_interval,
|
144
|
+
date = OpeningHoursConverter::OpeningHoursDate.new(date_range.wide_interval, [-1])
|
145
145
|
rule.add_date(date)
|
146
146
|
rule.is_defined_off = true
|
147
147
|
|
@@ -165,7 +165,7 @@ module OpeningHoursConverter
|
|
165
165
|
end
|
166
166
|
end
|
167
167
|
rule = OpeningHoursConverter::OpeningHoursRule.new
|
168
|
-
date = OpeningHoursConverter::OpeningHoursDate.new(date_range.wide_interval,
|
168
|
+
date = OpeningHoursConverter::OpeningHoursDate.new(date_range.wide_interval, [-1])
|
169
169
|
rule.add_date(date)
|
170
170
|
|
171
171
|
date_range.typical.intervals.each do |interval|
|
@@ -183,7 +183,7 @@ module OpeningHoursConverter
|
|
183
183
|
intervals = date_range.typical.get_intervals(true)
|
184
184
|
|
185
185
|
rule = OpeningHoursConverter::OpeningHoursRule.new
|
186
|
-
date = OpeningHoursConverter::OpeningHoursDate.new(date_range.wide_interval,
|
186
|
+
date = OpeningHoursConverter::OpeningHoursDate.new(date_range.wide_interval, [-1])
|
187
187
|
rule.add_date(date)
|
188
188
|
|
189
189
|
intervals.each do |interval|
|
@@ -200,7 +200,7 @@ module OpeningHoursConverter
|
|
200
200
|
result = []
|
201
201
|
|
202
202
|
intervals = date_range.typical.get_intervals(true)
|
203
|
-
days = create_time_intervals(date_range.wide_interval,
|
203
|
+
days = create_time_intervals(date_range.wide_interval, intervals)
|
204
204
|
|
205
205
|
days_status = Array.new(OSM_DAYS.length, 0)
|
206
206
|
|
@@ -259,7 +259,6 @@ module OpeningHoursConverter
|
|
259
259
|
intervals = date_range.typical.get_intervals_diff(general_date_range.typical)
|
260
260
|
days = create_time_intervals(
|
261
261
|
date_range.wide_interval,
|
262
|
-
date_range.wide_interval.type,
|
263
262
|
intervals[:open])
|
264
263
|
|
265
264
|
|
@@ -359,11 +358,11 @@ module OpeningHoursConverter
|
|
359
358
|
return result
|
360
359
|
end
|
361
360
|
|
362
|
-
def create_time_intervals(wide_interval,
|
361
|
+
def create_time_intervals(wide_interval, intervals)
|
363
362
|
days = []
|
364
363
|
for i in 0...7
|
365
364
|
days << OpeningHoursConverter::OpeningHoursRule.new
|
366
|
-
days[i].add_date(OpeningHoursConverter::OpeningHoursDate.new(wide_interval,
|
365
|
+
days[i].add_date(OpeningHoursConverter::OpeningHoursDate.new(wide_interval, [ i ]))
|
367
366
|
end
|
368
367
|
|
369
368
|
intervals.each do |interval|
|
@@ -4,15 +4,14 @@ module OpeningHoursConverter
|
|
4
4
|
class OpeningHoursDate
|
5
5
|
include Constants
|
6
6
|
attr_accessor :weekdays, :weekdays_over
|
7
|
-
attr_reader :
|
7
|
+
attr_reader :wide_interval
|
8
8
|
|
9
|
-
def initialize(
|
10
|
-
if
|
9
|
+
def initialize(wide_interval, weekdays)
|
10
|
+
if wide_interval.nil? || weekdays.nil? || !wide_interval.is_a?(OpeningHoursConverter::WideInterval)
|
11
11
|
raise ArgumentError
|
12
12
|
end
|
13
13
|
|
14
|
-
@
|
15
|
-
@wide_type = wide_type
|
14
|
+
@wide_interval = wide_interval
|
16
15
|
@weekdays = weekdays.sort
|
17
16
|
@weekdays_over = []
|
18
17
|
end
|
@@ -122,7 +121,7 @@ module OpeningHoursConverter
|
|
122
121
|
end
|
123
122
|
|
124
123
|
def same_kind_as?(date)
|
125
|
-
@
|
124
|
+
@wide_interval.type == date.wide_interval.type && date.same_weekdays?(@weekdays)
|
126
125
|
end
|
127
126
|
|
128
127
|
def same_weekdays?(weekdays)
|
@@ -130,7 +129,7 @@ module OpeningHoursConverter
|
|
130
129
|
end
|
131
130
|
|
132
131
|
def equals(o)
|
133
|
-
o.instance_of?(OpeningHoursConverter::OpeningHoursDate) && @
|
132
|
+
o.instance_of?(OpeningHoursConverter::OpeningHoursDate) && @wide_interval.type == o.wide_interval.type && @wide_interval.equals(o.wide_interval) && o.same_weekdays?(@weekdays)
|
134
133
|
end
|
135
134
|
end
|
136
135
|
end
|
@@ -53,14 +53,14 @@ module OpeningHoursConverter
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def get_wide_selector
|
56
|
-
if @date.length == 1 && @date[0].
|
57
|
-
if @date[0].
|
56
|
+
if @date.length == 1 && @date[0].wide_interval.type == "holiday"
|
57
|
+
if @date[0].wide_interval.start[:year].nil?
|
58
58
|
return "PH"
|
59
59
|
else
|
60
|
-
if @date[0].
|
61
|
-
return "#{@date[0].
|
60
|
+
if @date[0].wide_interval.end && @date[0].wide_interval.end[:year]
|
61
|
+
return "#{@date[0].wide_interval.start[:year]}-#{@date[0].wide_interval.end[:year]} PH"
|
62
62
|
else
|
63
|
-
return "#{@date[0].
|
63
|
+
return "#{@date[0].wide_interval.start[:year]} PH"
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
@@ -269,7 +269,7 @@ module OpeningHoursConverter
|
|
269
269
|
return false
|
270
270
|
else
|
271
271
|
@date.each_with_index do |d, i|
|
272
|
-
return false if !d.
|
272
|
+
return false if !d.wide_interval.equals(o.date[i].wide_interval)
|
273
273
|
end
|
274
274
|
return true
|
275
275
|
end
|
@@ -82,25 +82,25 @@ module OpeningHoursConverter
|
|
82
82
|
def self.build_day_array_from_dates(dates, get_iterator=false)
|
83
83
|
years = {}
|
84
84
|
dates.each do |date|
|
85
|
-
if !date.
|
86
|
-
if date.
|
87
|
-
if !years[date.
|
88
|
-
years = process_single_year(date.
|
85
|
+
if !date.wide_interval.start.nil? && !date.wide_interval.start[:year].nil?
|
86
|
+
if date.wide_interval.end.nil? || date.wide_interval.end[:year].nil? || date.wide_interval.start[:year] == date.wide_interval.end[:year]
|
87
|
+
if !years[date.wide_interval.start[:year]].nil?
|
88
|
+
years = process_single_year(date.wide_interval, years)
|
89
89
|
else
|
90
|
-
years[date.
|
91
|
-
years = process_single_year(date.
|
90
|
+
years[date.wide_interval.start[:year]] = Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } }
|
91
|
+
years = process_single_year(date.wide_interval, years)
|
92
92
|
end
|
93
93
|
else
|
94
|
-
for year in date.
|
94
|
+
for year in date.wide_interval.start[:year]..date.wide_interval.end[:year]
|
95
95
|
years[year] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } }
|
96
96
|
end
|
97
|
-
process_multiple_years(date.
|
97
|
+
process_multiple_years(date.wide_interval, years)
|
98
98
|
end
|
99
99
|
else
|
100
100
|
unless get_iterator
|
101
101
|
years["always"] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } }
|
102
102
|
end
|
103
|
-
years = process_always(date.
|
103
|
+
years = process_always(date.wide_interval, years, get_iterator)
|
104
104
|
end
|
105
105
|
end
|
106
106
|
years
|
@@ -209,7 +209,7 @@ module OpeningHoursConverter
|
|
209
209
|
years[year][wide_interval.start[:month]-1][i] = true
|
210
210
|
end
|
211
211
|
else
|
212
|
-
for month in wide_interval.start[:month]-1..date.
|
212
|
+
for month in wide_interval.start[:month]-1..date.wide_interval.end[:month]-1
|
213
213
|
years[year][month].each_with_index do |day, i|
|
214
214
|
years[year][month][i] = true
|
215
215
|
end
|
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.8.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:
|
11
|
+
date: 2019-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|