class OpeningHoursConverter::OpeningHoursDate
Attributes
weekdays[RW]
weekdays_over[RW]
wide_interval[R]
Public Class Methods
new(wide_interval, weekdays)
click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 9 def initialize(wide_interval, weekdays) if wide_interval.nil? || weekdays.nil? || !wide_interval.is_a?(OpeningHoursConverter::WideInterval) raise ArgumentError end @wide_interval = wide_interval @weekdays = weekdays.sort @weekdays_over = [] end
Public Instance Methods
add_overwritten_weekday(weekday)
click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 111 def add_overwritten_weekday(weekday) return if @weekdays_over.include?(weekday) @weekdays_over << weekday @weekdays_over.sort! end
add_ph_weekday()
click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 107 def add_ph_weekday add_weekday(-2) end
add_weekday(weekday)
click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 100 def add_weekday(weekday) return if @weekdays.include?(weekday) || @weekdays_over.include?(weekday) @weekdays << weekday @weekdays.sort! end
equals(o)
click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 126 def equals(o) o.instance_of?(OpeningHoursConverter::OpeningHoursDate) && @wide_interval.type == o.wide_interval.type && @wide_interval.equals(o.wide_interval) && o.same_weekdays?(@weekdays) end
get_weekdays()
click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 19 def get_weekdays result = '' weekdays = @weekdays.concat(@weekdays_over).sort.uniq if !weekdays.empty? && weekdays[0] == -2 result = 'PH' weekdays.shift end if !weekdays.empty? && weekdays.include?(6) && weekdays.include?(0) && (weekdays.include?(5) || weekdays.include?(1)) start_week_end = 6 i = weekdays.length - 2 stop_looking = false while !stop_looking && i >= 0 if weekdays[i] == weekdays[i + 1] - 1 start_week_end = weekdays[i] i -= 1 else stop_looking = true end end i = 1 stop_looking = false end_week_end = 0 while !stop_looking && i < weekdays.length if weekdays[i - 1] == weekdays[i] - 1 end_week_end = weekdays[i] i += 1 else stop_looking = true end end length = 7 - start_week_end + end_week_end + 1 if length >= 3 && start_week_end > end_week_end result += ',' if !result.empty? result += "#{OSM_DAYS[start_week_end]}-#{OSM_DAYS[end_week_end]}" j = 0 while j < weekdays.length if weekdays[j] <= end_week_end || weekdays[j] >= start_week_end weekdays.slice!(j, 1) else j += 1 end end end end if weekdays.length > 1 || (weekdays.length == 1 && weekdays[0] != -1) result += !result.empty? ? ",#{OSM_DAYS[weekdays[0]]}" : OSM_DAYS[weekdays[0]] first_in_row = weekdays[0] for i in 1...weekdays.length if weekdays[i - 1] != weekdays[i] - 1 if first_in_row != weekdays[i - 1] result += if weekdays[i - 1] - first_in_row == 1 ",#{OSM_DAYS[weekdays[i - 1]]}" else "-#{OSM_DAYS[weekdays[i - 1]]}" end end result += ",#{OSM_DAYS[weekdays[i]]}" first_in_row = weekdays[i] elsif i == weekdays.length - 1 result += if weekdays[i] - first_in_row == 1 ",#{OSM_DAYS[weekdays[i]]}" else "-#{OSM_DAYS[weekdays[i]]}" end end end end result = '' if result == 'Mo-Su' result end
same_kind_as?(date)
click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 118 def same_kind_as?(date) @wide_interval.type == date.wide_interval.type && date.same_weekdays?(@weekdays) end
same_weekdays?(weekdays)
click to toggle source
# File lib/opening_hours_converter/opening_hours_date.rb, line 122 def same_weekdays?(weekdays) weekdays == @weekdays end