Class: OpeningHoursConverter::Day

Inherits:
Object
  • Object
show all
Includes:
Constants
Defined in:
lib/opening_hours_converter/day.rb

Constant Summary

Constants included from Constants

Constants::DAYS, Constants::DAYS_MAX, Constants::IRL_DAYS, Constants::IRL_MONTHS, Constants::MINUTES_MAX, Constants::MONTH_END_DAY, Constants::OSM_DAYS, Constants::OSM_MONTHS, Constants::PH_WEEKDAY, Constants::YEAR_DAYS_MAX

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDay

Returns a new instance of Day.



8
9
10
# File 'lib/opening_hours_converter/day.rb', line 8

def initialize
  @intervals = []
end

Instance Attribute Details

#intervalsObject

Returns the value of attribute intervals.



6
7
8
# File 'lib/opening_hours_converter/day.rb', line 6

def intervals
  @intervals
end

Instance Method Details

#add_interval(interval) ⇒ Object



83
84
85
86
# File 'lib/opening_hours_converter/day.rb', line 83

def add_interval(interval)
  @intervals << interval
  @intervals.length - 1
end

#clear_intervalsObject



96
97
98
# File 'lib/opening_hours_converter/day.rb', line 96

def clear_intervals
  @intervals = []
end

#copy_intervals(intervals) ⇒ Object



100
101
102
103
104
105
106
107
108
# File 'lib/opening_hours_converter/day.rb', line 100

def copy_intervals(intervals)
  @intervals = []
  intervals.each do |interval|
    if !interval.nil? && !interval.is_off && interval.day_start == 0 && interval.day_end == 0
      @intervals << interval.dup
    end
  end
  @intervals = get_intervals(true)
end

#edit_interval(id, interval) ⇒ Object



88
89
90
# File 'lib/opening_hours_converter/day.rb', line 88

def edit_interval(id, interval)
  @intervals[id] = interval
end

#get_as_minute_arrayObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/opening_hours_converter/day.rb', line 12

def get_as_minute_array
  minute_array = Array.new(MINUTES_MAX + 1, false)

  @intervals.each do |interval|
    next if interval.nil?

    off, start_minute, end_minute = handle_interval(interval)

    raise ParseError, "Invalid interval #{interval.inspect}" if start_minute.nil? && end_minute.nil?

    (start_minute..end_minute).step do |minute|
      minute_array[minute] = off ? 'off' : true
    end
  end

  minute_array
end

#get_intervals(clean = false) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/opening_hours_converter/day.rb', line 47

def get_intervals(clean = false)
  if clean
    minute_array = get_as_minute_array
    intervals = []
    minute_start = -1
    off = false

    minute_array.each_with_index do |minute, i|
      off, minute_start, intervals = handle_minute(minute, off, minute_start, intervals, i, minute_array)
    end
    intervals
  else
    @intervals
  end
end

#handle_interval(interval) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/opening_hours_converter/day.rb', line 30

def handle_interval(interval)
  off = interval.is_off

  if off
    start_minute = 0
    end_minute = MINUTES_MAX
  elsif interval.single_day? || interval.max?
    start_minute = interval.start
    end_minute = interval.end
  elsif interval.single_day_end_at_midnight?
    start_minute = interval.start
    end_minute = MINUTES_MAX
  end

  [off, start_minute, end_minute]
end

#handle_minute(minute, off, minute_start, intervals, i, minute_array) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/opening_hours_converter/day.rb', line 63

def handle_minute(minute, off, minute_start, intervals, i, minute_array)
  if minute
    if i == 0
      off = true if minute == 'off'
      minute_start = i
    elsif minute_start < 0
      minute_start = i
    elsif i == minute_array.length - 1
      intervals << OpeningHoursConverter::Interval.new(0, minute_start, 0, i - 1, off)
      minute_start = -1
      off = false
    end
  elsif minute_start >= 0
    intervals << OpeningHoursConverter::Interval.new(0, minute_start, 0, i - 1, off)
    minute_start = -1
    off = false
  end
  [off, minute_start, intervals]
end

#remove_interval(id) ⇒ Object



92
93
94
# File 'lib/opening_hours_converter/day.rb', line 92

def remove_interval(id)
  @intervals[id] = nil
end

#same_as?(day) ⇒ Boolean

Returns:

  • (Boolean)


110
111
112
# File 'lib/opening_hours_converter/day.rb', line 110

def same_as?(day)
  day.get_as_minute_array == get_as_minute_array
end