opening_hours_converter 1.0.0 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce16e76b1a7b611c0b82c3416e9282df1638df76
4
- data.tar.gz: d41e59d6d13771a1b18a8c3e4e1edc42b4ab8b8d
3
+ metadata.gz: fc8f56307535202e3d7fed87c5c4ec147906e7de
4
+ data.tar.gz: 9a271684ea3fa41b7969408d19754efd7f571151
5
5
  SHA512:
6
- metadata.gz: 834a523ad7ebe902b4a857a9f77641cf8bad74f58a4188839c9a956f5ac73c780eefcf98bc2123af5542269f8e66d73e5d9e1a807e7140d395b21bf7c4f09fce
7
- data.tar.gz: f91a6e6b1051a74c727676c7359801070a70bd9b6d551fa9a8ec323b1bd763121959b22bcdb621d844903feb9b36ddc211e141e7021963fd548a1d21348e20a3
6
+ metadata.gz: cb354f6b4afc01071ec3e26e3f0d5f201b7c0135af63c507134bb4f6bb191e3b89b591c78518b97c90a352cc685da78bc86478ce44b4cf57888a343801f2897b
7
+ data.tar.gz: 040b9fedf42908fb206b5bae2a3d7ab082f08c364246d79a0d3650ab36a8929501c63207d92bc65cdabe41f6efc72a16170fd50d977bddb8d6f64aca862945d2
@@ -19,7 +19,5 @@ module OpeningHoursConverter
19
19
  MINUTES_MAX = 1440
20
20
  DAYS_MAX = 6
21
21
  YEAR_DAYS_MAX = 365
22
- YEAR_MIN = DateTime.now.year - 1
23
- YEAR_MAX = DateTime.now.year + 5
24
22
  end
25
23
  end
@@ -1,10 +1,11 @@
1
1
  module OpeningHoursConverter
2
2
  class DateRange
3
- attr_accessor :wide_interval, :typical
3
+ attr_accessor :wide_interval, :typical, :comment
4
4
 
5
5
  def initialize(w=nil)
6
6
  @wide_interval = nil
7
7
  @typical = nil
8
+ @comment = ""
8
9
  update_range(w)
9
10
  end
10
11
 
@@ -33,12 +34,16 @@ module OpeningHoursConverter
33
34
  end
34
35
  end
35
36
 
37
+ def add_comment(comment="")
38
+ @comment += comment
39
+ end
40
+
36
41
  def has_same_typical?(date_range)
37
42
  defines_typical_day? == date_range.defines_typical_day? && @typical.same_as?(date_range.typical)
38
43
  end
39
44
 
40
45
  def is_general_for?(date_range)
41
- defines_typical_day? == date_range.defines_typical_day? && @wide_interval.contains?(date_range.wide_interval)
46
+ defines_typical_day? == date_range.defines_typical_day? && @wide_interval.contains?(date_range.wide_interval) && @comment == date_range.comment
42
47
  end
43
48
  end
44
49
  end
@@ -16,6 +16,7 @@ module OpeningHoursConverter
16
16
  range_general = nil
17
17
  range_general_for = nil
18
18
  range_general_id = date_range_index - 1
19
+
19
20
  while range_general_id >= 0 && range_general.nil?
20
21
  if !date_range.nil?
21
22
  general_for = date_ranges[range_general_id].is_general_for?(date_range)
@@ -27,7 +28,6 @@ module OpeningHoursConverter
27
28
  end
28
29
  range_general_id -= 1
29
30
  end
30
- # binding.pry
31
31
  if date_range_index == 0 || range_general.nil?
32
32
  if date_range.defines_typical_week?
33
33
  if !range_general_for.nil?
@@ -39,17 +39,16 @@ module OpeningHoursConverter
39
39
  oh_rules = build_day(date_range)
40
40
  end
41
41
 
42
- # oh_rule_index = 0
43
- # for oh_rule_index in 0...oh_rules.length
44
- oh_rules.map do |oh_rule|
45
- # while oh_rule_index < oh_rules.length
42
+ oh_rules.each_with_index do |rule, i|
43
+ oh_rules[i].add_comment(date_range.comment)
44
+ end
46
45
 
47
- # oh_rule = oh_rules[oh_rule_index]
46
+ oh_rules.map do |oh_rule|
48
47
  oh_rule_added = false
49
48
  rule_index = 0
50
49
 
51
50
  while !oh_rule_added && rule_index < rules.length
52
- if rules[rule_index].same_time?(oh_rule) && !rules[rule_index].equals(oh_rule)
51
+ if rules[rule_index].same_time?(oh_rule) && !rules[rule_index].equals(oh_rule) && rules[rule_index].comment == oh_rule.comment
53
52
  begin
54
53
  for date_id in 0...oh_rule.date.length
55
54
  rules[rule_index].add_date(oh_rule.date[date_id])
@@ -82,10 +81,8 @@ module OpeningHoursConverter
82
81
  end
83
82
  end
84
83
  end
85
-
86
84
  # binding.pry
87
85
 
88
-
89
86
  result = ""
90
87
  rules.each_with_index do |rule, rule_index|
91
88
  if rule_index > 0
@@ -114,7 +111,6 @@ module OpeningHoursConverter
114
111
  end
115
112
 
116
113
  def build_week(date_range)
117
- # binding.pry
118
114
  result = []
119
115
  intervals = date_range.typical.get_intervals(true)
120
116
  time_intervals = create_time_intervals(date_range.wide_interval, date_range.wide_interval.type, intervals)
@@ -289,7 +285,6 @@ module OpeningHoursConverter
289
285
  end
290
286
 
291
287
  def create_time_intervals(wide_interval, type, intervals)
292
- # binding.pry
293
288
  monday0 = -1
294
289
  sunday24 = -1
295
290
 
@@ -17,12 +17,14 @@ module OpeningHoursConverter
17
17
  @RGX_YEAR = /^(\d{4})(\-(\d{4}))?$/
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
+ @RGX_COMMENT = /^\"[^\"]*\"$/
20
21
  end
21
22
 
22
23
  def parse(oh)
23
24
  result = []
24
25
  blocks = oh.split(';')
25
26
 
27
+ comment = nil
26
28
  rule_modifier = nil
27
29
  time_selector = nil
28
30
  weekday_selector = nil
@@ -47,6 +49,13 @@ module OpeningHoursConverter
47
49
  tokens = tokenize(block)
48
50
  current_token = tokens.length - 1
49
51
 
52
+ # get comment
53
+ if current_token >= 0 && is_comment?(tokens[current_token])
54
+ comment = tokens[current_token]
55
+ current_token -= 1
56
+ end
57
+
58
+
50
59
  # get state
51
60
  if current_token >= 0 && is_rule_modifier?(tokens[current_token])
52
61
  rule_modifier = tokens[current_token].downcase
@@ -70,24 +79,6 @@ module OpeningHoursConverter
70
79
  current_token -= 1
71
80
  end
72
81
 
73
- # years = []
74
- # if current_token >= 0 && is_year?(tokens[current_token])
75
- # year_selector = tokens[current_token]
76
- # year_selector = year_selector.split(',')
77
- # year_selector.each do |y|
78
- # single_year = y.gsub(/\:$/, '').split('-')
79
- # year_from = single_year[0]
80
- # if single_year.length > 1
81
- # year_to = single_year[1]
82
- # else
83
- # year_to = year_from
84
- # end
85
-
86
- # years << {from: year_from, to: year_to}
87
- # end
88
- # current_token -= 1
89
- # end
90
-
91
82
  months = []
92
83
  years = []
93
84
  if current_token >= 0
@@ -183,13 +174,12 @@ module OpeningHoursConverter
183
174
  times << {from: 0, to: 24*60}
184
175
  end
185
176
 
186
- # pasur
187
177
  date_ranges.each do |dr|
188
178
  found_date_range = false
189
179
  res_dr_id = 0
190
180
 
191
181
  while res_dr_id < result.length && !found_date_range
192
- if result[res_dr_id].wide_interval.equals(dr)
182
+ if result[res_dr_id].wide_interval.equals(dr) && result[res_dr_id].comment == comment
193
183
  found_date_range = true
194
184
  else
195
185
  res_dr_id += 1
@@ -200,6 +190,9 @@ module OpeningHoursConverter
200
190
  dr_obj = result[res_dr_id]
201
191
  else
202
192
  dr_obj = OpeningHoursConverter::DateRange.new(dr)
193
+ if !comment.nil?
194
+ dr_obj.add_comment(comment)
195
+ end
203
196
 
204
197
  general = -1
205
198
  for res_dr_id in 0...result.length
@@ -246,9 +239,12 @@ module OpeningHoursConverter
246
239
  add_interval(dr_obj.typical, weekdays[wd_id], times[t_id])
247
240
  end
248
241
  end
242
+
243
+
249
244
  end
250
245
  end
251
246
  end
247
+
252
248
  return result
253
249
  end
254
250
 
@@ -483,7 +479,13 @@ module OpeningHoursConverter
483
479
  end
484
480
 
485
481
  def tokenize(block)
486
- block.split(' ')
482
+ if block.split('"').length > 1
483
+ comment = block.split('"')[1]
484
+ tokens = block.split('"')[0].split(' ')
485
+ tokens << "\"#{comment}\""
486
+ else
487
+ block.split(' ')
488
+ end
487
489
  end
488
490
 
489
491
  def as_minutes(time)
@@ -491,6 +493,9 @@ module OpeningHoursConverter
491
493
  values[0].to_i * 60 + values[1].to_i
492
494
  end
493
495
 
496
+ def is_comment?(token)
497
+ !(@RGX_COMMENT =~ token).nil?
498
+ end
494
499
  def is_rule_modifier?(token)
495
500
  !(@RGX_RULE_MODIFIER =~ token).nil?
496
501
  end
@@ -3,15 +3,15 @@ require 'opening_hours_converter/constants'
3
3
  module OpeningHoursConverter
4
4
  class OpeningHoursRule
5
5
  include Constants
6
- attr_accessor :date, :time
6
+ attr_accessor :date, :time, :comment
7
7
 
8
8
  def initialize
9
9
  @date = []
10
10
  @time = []
11
+ @comment = ""
11
12
  end
12
13
 
13
14
  def get
14
- get_wide_selector if @date.length > 1
15
15
  result = ""
16
16
  if @date.length > 0
17
17
  result += get_wide_selector
@@ -42,14 +42,15 @@ module OpeningHoursConverter
42
42
  result.gsub!("00:00-24:00", "24/7")
43
43
  end
44
44
 
45
+ if !comment.nil? && comment.length != 0
46
+ result += " #{comment}"
47
+ end
45
48
 
46
- result = clean(result)
47
49
  result.strip
48
50
  end
49
51
 
50
52
  def get_wide_selector
51
-
52
- years = build_day_array
53
+ years = OpeningHoursConverter::Year.build_day_array_from_dates(@date)
53
54
 
54
55
  year_start = -1
55
56
  month_start = -1
@@ -58,7 +59,6 @@ module OpeningHoursConverter
58
59
  result = {}
59
60
 
60
61
  if !years["always"].nil?
61
-
62
62
  always = years.delete("always")
63
63
 
64
64
  always.each_with_index do |month_array, month|
@@ -85,15 +85,6 @@ module OpeningHoursConverter
85
85
  end
86
86
  end
87
87
 
88
- # years {
89
- # 2017: [
90
- # {start: {}, end: {}}
91
- # ],
92
- # multi_year: [
93
- # {start: {}, {}}
94
- # ]
95
- # }
96
-
97
88
  years.each do |year, months|
98
89
  months.each_with_index do |month_array, month|
99
90
  month_array.each_with_index do |day_bool, day|
@@ -137,11 +128,6 @@ module OpeningHoursConverter
137
128
  result["multi_year"]["#{year_start}-#{year}"] << { start: { day: day_start, month: month_start, year: year_start },
138
129
  end: end_res }
139
130
  end
140
- # end_res = day == 0 ?
141
- # month == 0 ?
142
- # { day: 30, month: 11, year: year } : { day: MONTH_END_DAY[month-1]-1, month: month-1, year: year } :
143
- # { day: day-1, month: month, year: year }
144
- # result << {start: {day: day_start, month: month_start, year: year_start}, end: end_res}
145
131
  year_start = -1
146
132
  month_start = -1
147
133
  day_start = -1
@@ -149,10 +135,7 @@ module OpeningHoursConverter
149
135
  end
150
136
  end
151
137
  end
152
-
153
-
154
138
  result_to_string(result)
155
-
156
139
  end
157
140
 
158
141
  def result_to_string(result)
@@ -241,287 +224,6 @@ module OpeningHoursConverter
241
224
  r[:end][:month] == 11 && ends_month?(r)
242
225
  end
243
226
 
244
- def build_day_array
245
- years = {}
246
- @date.each do |date|
247
- if !date.wide.start.nil? && !date.wide.start[:year].nil?
248
- if date.wide.end.nil? || date.wide.end[:year].nil? || date.wide.start[:year] == date.wide.end[:year]
249
- if !years[date.wide.start[:year]].nil?
250
- years = process_single_year(date, years)
251
- else
252
- years[date.wide.start[:year]] = Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } }
253
- years = process_single_year(date, years)
254
- end
255
- else
256
- for year in date.wide.start[:year]..date.wide.end[:year]
257
- years[year] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } }
258
- end
259
- process_multiple_years(date, years)
260
- end
261
- else
262
- years["always"] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } }
263
- years = process_always(date, years)
264
- end
265
- end
266
- years
267
- end
268
-
269
- def process_always(date, years, get_iterator=false)
270
- if !get_iterator
271
- if date.wide.start.nil?
272
- years["always"] = Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { true } }
273
- elsif !date.wide.start[:day].nil?
274
- if date.wide.end.nil? || (date.wide.end[:month].nil? && date.wide.end[:day].nil?) ||
275
- (date.wide.start[:month] == date.wide.end[:month] && date.wide.start[:day] == date.wide.end[:day])
276
- years["always"][date.wide.start[:month]-1][date.wide.start[:day]-1] = true
277
- elsif date.wide.start[:month] == date.wide.end[:month]
278
- for day in date.wide.start[:day]-1..date.wide.end[:day]-1
279
- years["always"][date.wide.start[:month]-1][day] = true
280
- end
281
- elsif date.wide.start[:month] != date.wide.end[:month]
282
- for month in date.wide.start[:month]-1..date.wide.end[:month]-1
283
- if month == date.wide.start[:month]-1
284
- for day in date.wide.start[:day]-1...MONTH_END_DAY[month]
285
- years["always"][month][day] = true
286
- end
287
- elsif month == date.wide.end[:month]-1
288
- for day in 0..date.wide.end[:day]-1
289
- years["always"][month][day] = true
290
- end
291
- else
292
- for day in 0...MONTH_END_DAY[month]
293
- years["always"][month][day] = true
294
- end
295
- end
296
- end
297
- end
298
- elsif !date.wide.start[:month].nil?
299
- if date.wide.end.nil? || date.wide.end[:month].nil? || date.wide.start[:month] == date.wide.end[:month]
300
- years["always"][date.wide.start[:month]-1].each_with_index do |month, i|
301
- years["always"][date.wide.start[:month]-1][i] = true
302
- end
303
- else
304
- for month in date.wide.start[:month]-1..date.wide.end[:month]-1
305
- years["always"][month].each_with_index do |day, i|
306
- years["always"][month][i] = true
307
- end
308
- end
309
- end
310
- end
311
- else
312
- for year in YEAR_MIN..YEAR_MAX
313
- if years[year].nil?
314
- years[year] = Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } }
315
- end
316
- if !date.wide.start[:day].nil?
317
- if date.wide.end.nil? || (date.wide.end[:month].nil? && date.wide.end[:day].nil?) ||
318
- (date.wide.start[:month] == date.wide.end[:month] && date.wide.start[:day] == date.wide.end[:day])
319
- years[year][date.wide.start[:month]-1][date.wide.start[:day]-1] = true
320
- elsif date.wide.start[:month] == date.wide.end[:month]
321
- for day in date.wide.start[:day]-1..date.wide.end[:day]-1
322
- years[year][date.wide.start[:month]-1][day] = true
323
- end
324
- elsif date.wide.start[:month] != date.wide.end[:month]
325
- for month in date.wide.start[:month]-1..date.wide.end[:month]-1
326
- if month == date.wide.start[:month]-1
327
- for day in date.wide.start[:day]-1...MONTH_END_DAY[month]
328
- years[year][month][day] = true
329
- end
330
- elsif month == date.wide.end[:month]-1
331
- for day in 0..date.wide.end[:day]-1
332
- years[year][month][day] = true
333
- end
334
- else
335
- for day in 0...MONTH_END_DAY[month]
336
- years[year][month][day] = true
337
- end
338
- end
339
- end
340
- end
341
- elsif !date.wide.start[:month].nil?
342
- if date.wide.end.nil? || date.wide.end[:month].nil? || date.wide.start[:month] == date.wide.end[:month]
343
- years[year][date.wide.start[:month]-1].each_with_index do |month, i|
344
- years[year][date.wide.start[:month]-1][i] = true
345
- end
346
- else
347
- for month in date.wide.start[:month]-1..date.wide.end[:month]-1
348
- years[year][month].each_with_index do |day, i|
349
- years[year][month][i] = true
350
- end
351
- end
352
- end
353
- end
354
- end
355
- end
356
- return years
357
- end
358
-
359
- def process_multiple_years(date, years)
360
- if date.wide.type == "year"
361
- for year in date.wide.start[:year]..date.wide.end[:year]
362
- years[year].each_with_index do |month,i|
363
- month.each_with_index do |day,j|
364
- years[year][i][j] = true
365
- end
366
- end
367
- end
368
- elsif date.wide.type == "month"
369
- for year in date.wide.start[:year]..date.wide.end[:year]
370
- if year == date.wide.start[:year]
371
- for month in date.wide.start[:month]-1..11
372
- years[year][month].each_with_index do |day, i|
373
- years[year][month][i] = true
374
- end
375
- end
376
- elsif year == date.wide.end[:year]
377
- for month in 0..date.wide.end[:month]-1
378
- years[year][month].each_with_index do |day, i|
379
- years[year][month][i] = true
380
- end
381
- end
382
- else
383
- for month in 0..11
384
- years[year][month].each_with_index do |day, i|
385
- years[year][month][i] = true
386
- end
387
- end
388
- end
389
- end
390
- elsif date.wide.type == "day"
391
- for year in date.wide.start[:year]..date.wide.end[:year]
392
- if year == date.wide.start[:year]
393
- for month in date.wide.start[:month]-1..11
394
- if month == date.wide.start[:month]-1
395
- for day in date.wide.start[:day]-1...MONTH_END_DAY[month]
396
- years[year][month][day] = true
397
- end
398
- else
399
- for day in 0...MONTH_END_DAY[month]
400
- years[year][month][day] = true
401
- end
402
- end
403
- end
404
- elsif year == date.wide.end[:year]
405
- for month in 0..date.wide.end[:month]-1
406
- if month == date.wide.end[:month]-1
407
- for day in 0..date.wide.end[:day]-1
408
- years[year][month][day] = true
409
- end
410
- else
411
- for day in 0...MONTH_END_DAY[month]
412
- years[year][month][day] = true
413
- end
414
- end
415
- end
416
- else
417
- for month in 0..11
418
- for day in 0...MONTH_END_DAY[month]
419
- years[year][month][day] = true
420
- end
421
- end
422
- end
423
- end
424
- end
425
- return years
426
- end
427
-
428
- def process_single_year(date, years, always=false)
429
- if date.wide.type == "year"
430
- years[date.wide.start[:year]].each_with_index do |month,i|
431
- month.each_with_index do |day,j|
432
- years[date.wide.start[:year]][i][j] = true
433
- end
434
- end
435
- elsif date.wide.type == "month"
436
- if date.wide.end.nil? || date.wide.end[:month].nil? || date.wide.start[:month] == date.wide.end[:month]
437
- years[date.wide.start[:year]][date.wide.start[:month]-1].each_with_index do |month, i|
438
- years[date.wide.start[:year]][date.wide.start[:month]-1][i] = true
439
- end
440
- else
441
- for month in date.wide.start[:month]-1..date.wide.end[:month]-1
442
- years[date.wide.start[:year]][month].each_with_index do |day, i|
443
- years[date.wide.start[:year]][month][i] = true
444
- end
445
- end
446
- end
447
- elsif date.wide.type == "day"
448
- if date.wide.start[:month] == date.wide.end[:month] || date.wide.end[:month].nil?
449
- if date.wide.start[:day] == date.wide.end[:day]
450
- years[date.wide.start[:year]][date.wide.start[:month]-1][date.wide.start[:day]-1] = true
451
- else
452
- for day in date.wide.start[:day]-1..date.wide.end[:day]-1
453
- years[date.wide.start[:year]][date.wide.start[:month]-1][day] = true
454
- end
455
- end
456
- else
457
- for month in date.wide.start[:month]-1..date.wide.end[:month]-1
458
- if month == date.wide.start[:month]-1
459
- for day in date.wide.start[:day]-1...MONTH_END_DAY[month]
460
- years[date.wide.start[:year]][month][day] = true
461
- end
462
- elsif month == date.wide.end[:month]-1
463
- for day in 0..date.wide.end[:day]-1
464
- years[date.wide.start[:year]][month][day] = true
465
- end
466
- else
467
- for day in 0...MONTH_END_DAY[month]
468
- years[date.wide.start[:year]][month][day] = true
469
- end
470
- end
471
- end
472
- end
473
- end
474
- return years
475
- end
476
-
477
- def clean(result)
478
- result = remove_duplicate_year(result)
479
- result = remove_bad_spaces(result)
480
- end
481
-
482
- def remove_bad_spaces(result)
483
- return result if (result =~ /\,\s/).nil?
484
- return result.split(', ').join(',')
485
- end
486
-
487
- def remove_duplicate_year(result)
488
- return result if (result =~ /(\d{4})[^;]+(\1)/).nil? && (result =~ /(\d{4}\-\d{4})[^;]+(\1)/).nil?
489
- result_parts = result.split(';')
490
- sanitized_parts = []
491
- result_parts.each do |rp|
492
-
493
- # string with year range repeating separated by a comma
494
- if !(rp =~ /(\d{4}\-\d{4})\,(\1)/).nil?
495
- first_occurence = (rp =~ /(\d{4}\-\d{4})/)
496
- years = result[first_occurence...first_occurence + 9]
497
-
498
- sanitized_parts << years + rp[first_occurence + 10, rp.length].split(year).join('')
499
-
500
- # string with year repeating separrated by a comma
501
- elsif !(rp =~ /(\d{4})\,(\1)/).nil?
502
- first_occurence = (rp =~ /(\d{4})/)
503
- year = result[first_occurence...first_occurence + 4]
504
-
505
- sanitized_parts << year + rp[first_occurence + 5, rp.length].split(year).join('')
506
-
507
- # string with year range repeating
508
- elsif !(rp =~ /(\d{4}\-\d{4})[^;]+(\1)/).nil?
509
- first_occurence = (rp =~ /(\d{4}\-\d{4})/)
510
- years = result[first_occurence...first_occurence + 9]
511
-
512
- sanitized_parts << years + rp[first_occurence + 9, rp.length].split(year).join('')
513
-
514
- # string with year repeating
515
- elsif !(rp =~ /(\d{4})[^;]+(\1)/).nil?
516
- first_occurence = (rp =~ /(\d{4})/)
517
- year = result[first_occurence...first_occurence + 4]
518
-
519
- sanitized_parts << year + rp[first_occurence + 4, rp.length].split(year).join('')
520
- end
521
- end
522
- sanitized_parts.join('')
523
- end
524
-
525
227
  def same_time?(o)
526
228
  if o.nil? || o.time.length != @time.length
527
229
  return false
@@ -577,7 +279,7 @@ module OpeningHoursConverter
577
279
  if @date.length == 0 || date.same_weekdays?(@date.first.weekdays)
578
280
  @date << date
579
281
  else
580
- if @date.length != 1 || @date.first.wide_type != "always" || !@date.first.same_weekdays?(date.weekdays)
282
+ if !@date.first.same_weekdays?(date.weekdays)
581
283
  raise ArgumentError, "This date #{@date.inspect} can't be added to this rule #{self.inspect}"
582
284
  end
583
285
  end
@@ -590,5 +292,9 @@ module OpeningHoursConverter
590
292
  raise ArgumentError, "This time can't be added to this rule"
591
293
  end
592
294
  end
295
+
296
+ def add_comment(comment)
297
+ @comment = comment
298
+ end
593
299
  end
594
300
  end
@@ -80,6 +80,24 @@ module OpeningHoursConverter
80
80
  self
81
81
  end
82
82
 
83
+ def date_time(start_date, end_date=nil)
84
+ if start_date.nil?
85
+ raise(ArgumentError, "start_date is required")
86
+ end
87
+ if !start_date.instance_of?(DateTime)
88
+ raise(ArgumentError, "start_date is not a DateTime")
89
+ end
90
+ if !end_date.instance_of?(DateTime)
91
+ raise(ArgumentError, "end_date is not a DateTime")
92
+ end
93
+ @start = { day: start_date.day, month: start_date.month, year: start_date.year }
94
+ if !end_date.nil? && end_date != start_date
95
+ @end = { day: end_date.day, month: end_date.month, year: end_date.year }
96
+ end
97
+ @type = "day"
98
+ self
99
+ end
100
+
83
101
  def month(start_month, start_year=nil, end_month=nil, end_year=nil)
84
102
  if start_month.nil?
85
103
  raise(ArgumentError, "start_month is required")
@@ -2,12 +2,14 @@ module OpeningHoursConverter
2
2
  require 'date'
3
3
  require_relative './opening_hours_converter/date_range'
4
4
  require_relative './opening_hours_converter/day'
5
+ require_relative './opening_hours_converter/week'
6
+ require_relative './opening_hours_converter/year'
5
7
  require_relative './opening_hours_converter/interval'
8
+ require_relative './opening_hours_converter/iterator'
6
9
  require_relative './opening_hours_converter/opening_hours_builder'
7
10
  require_relative './opening_hours_converter/opening_hours_date'
8
11
  require_relative './opening_hours_converter/opening_hours_parser'
9
12
  require_relative './opening_hours_converter/opening_hours_rule'
10
13
  require_relative './opening_hours_converter/opening_hours_time'
11
- require_relative './opening_hours_converter/week'
12
14
  require_relative './opening_hours_converter/wide_interval'
13
15
  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.0.0
4
+ version: 1.1.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 00:00:00.000000000 Z
11
+ date: 2017-10-16 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.