class OpeningHoursConverter::OpeningHoursRule
Attributes
comment[RW]
date[RW]
is_defined_off[RW]
time[RW]
Public Class Methods
new()
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 8 def initialize @date = [] @time = [] @is_defined_off = false @comment = '' end
Public Instance Methods
add_comment(comment)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 351 def add_comment(comment) @comment = comment end
add_date(date)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 326 def add_date(date) if date.nil? || !date.instance_of?(OpeningHoursConverter::OpeningHoursDate) raise ArgumentError end if @date.empty? || date.same_weekdays?(@date.first.weekdays) @date << date else if !@date.first.same_weekdays?(date.weekdays) raise ArgumentError, "This date #{@date.inspect} can't be added to this rule #{inspect}" end end end
add_overwritten_weekday(weekday)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 320 def add_overwritten_weekday(weekday) @date.each do |d| d.add_overwritten_weekday(weekday) end end
add_ph_weekday()
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 316 def add_ph_weekday @date.each(&:add_ph_weekday) end
add_time(time)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 347 def add_time(time) @time << time if (@time.empty? || @time[0].get != 'off') && !include_time?(time) end
add_weekday(weekday)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 310 def add_weekday(weekday) @date.each do |d| d.add_weekday(weekday) end end
ends_month?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 263 def ends_month?(r) r[:end][:day] == MONTH_END_DAY[r[:end][:month]] - 1 end
ends_year?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 271 def ends_year?(r) r[:end][:month] == 11 && ends_month?(r) end
equals(o)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 297 def equals(o) return false unless o.instance_of?(OpeningHoursConverter::OpeningHoursRule) (same_time?(o) && same_date?(o)) end
get()
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 15 def get result = '' result += get_wide_selector if !@date.empty? if !@date.empty? wd = @date[0].get_weekdays result += " #{wd}" if !wd.empty? end if @is_defined_off result += ' off' elsif !@time.empty? result += ' ' @time.uniq.each_with_index do |t, i| result += ',' if i > 0 result += t.get end else result += ' off' end rgx_day = /(Mo|Tu|We|Th|Fr|Sa|Su)/ if result.strip == '00:00-24:00' || (!(result =~ /00:00-24:00/).nil? && (result =~ rgx_day).nil?) result.gsub!('00:00-24:00', '24/7') end result += " #{comment}" if !comment.nil? && !comment.empty? result.strip end
get_wide_selector()
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 47 def get_wide_selector if @date.length == 1 && @date[0].wide_interval.type == 'holiday' if @date[0].wide_interval.start[:year].nil? return 'PH' else if @date[0].wide_interval.end && @date[0].wide_interval.end[:year] return "#{@date[0].wide_interval.start[:year]}-#{@date[0].wide_interval.end[:year]} PH" else return "#{@date[0].wide_interval.start[:year]} PH" end end end years = OpeningHoursConverter::Year.build_day_array_from_dates(@date) year_start = -1 month_start = -1 day_start = -1 return result_to_string(years) if is_only_week_interval?(years) result = {} if !years['always'].nil? always = years.delete('always') always.each_with_index do |month_array, month| month_array.each_with_index do |day_bool, day| if day_bool && month_start < 0 month_start = month day_start = day end if day_bool && month_start >= 0 && month == 11 && day == 30 result['always'] ||= [] result['always'] << { start: { day: day_start, month: month_start }, end: { day: 30, month: 11 } } month_start = -1 day_start = -1 elsif !day_bool && month_start >= 0 result['always'] ||= [] end_res = day == 0 ? month == 0 ? { day: 30, month: 11 } : { day: MONTH_END_DAY[month - 1] - 1, month: month - 1 } : { day: day - 1, month: month } result['always'] << { start: { day: day_start, month: month_start }, end: end_res } month_start = -1 day_start = -1 end end end end years.each do |year, months| months.each_with_index do |month_array, month| month_array.each_with_index do |day_bool, day| if day_bool && year_start < 0 year_start = year month_start = month day_start = day end if day_bool && year_start >= 0 && month == 11 && day == 30 && years[year + 1].nil? if year_start == year result[year] ||= [] result[year] << { start: { day: day_start, month: month_start }, end: { day: 30, month: 11 } } else result['multi_year'] ||= {} result['multi_year']["#{year_start}-#{year}"] ||= [] result['multi_year']["#{year_start}-#{year}"] << { start: { day: day_start, month: month_start, year: year_start }, end: { day: 30, month: 11, year: year } } end year_start = -1 month_start = -1 day_start = -1 elsif !day_bool && year_start >= 0 end_res = {} end_res = if day == 0 if month == 0 { day: 30, month: 11 } else { day: MONTH_END_DAY[month - 1] - 1, month: month - 1 } end else { day: day - 1, month: month } end if year_start == year result[year] ||= [] result[year] << { start: { day: day_start, month: month_start }, end: end_res } else result['multi_year'] ||= {} result['multi_year']["#{year_start}-#{year}"] ||= [] end_res[:year] = year result['multi_year']["#{year_start}-#{year}"] << { start: { day: day_start, month: month_start, year: year_start }, end: end_res } end year_start = -1 month_start = -1 day_start = -1 end end end end result_to_string(result) end
has_overwritten_weekday?()
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 306 def has_overwritten_weekday? !@date.empty? && !@date[0].weekdays_over.empty? end
include_time?(time)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 340 def include_time?(time) @time.each do |t| return true if t.start == time.start && t.end == time.end end false end
is_full_month?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 243 def is_full_month?(r) is_same_month?(r) && starts_month?(r) && ends_month?(r) end
is_full_year?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 239 def is_full_year?(r) starts_year?(r) && ends_year?(r) end
is_off?()
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 302 def is_off? @time.empty? || (@time.length == 1 && time[0].start.nil?) end
is_only_week_interval?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 228 def is_only_week_interval?(r) r.all? do |year, intervals| intervals.all? do |interval| is_week_interval?(interval) end end end
is_same_day?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 255 def is_same_day?(r) r[:start][:day] == r[:end][:day] end
is_same_month?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 251 def is_same_month?(r) r[:start][:month] == r[:end][:month] end
is_same_year?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 247 def is_same_year?(r) r[:start][:year] == r[:end][:year] end
is_week_interval?(interval)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 235 def is_week_interval?(interval) !interval.is_a?(Array) && interval.key?(:start) && interval[:start].key?(:week) end
result_to_string(result)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 151 def result_to_string(result) str_result = '' if is_only_week_interval?(result) local_str = result.keys == ['always'] ? 'week ' : result.keys.length == 1 ? result.keys.first.to_s + ' week ' : result.keys.min.to_s + '-' + result.keys.max.to_s + ' week ' intervals = result[result.keys.first] intervals.each do |interval| local_str += "," if !(local_str[local_str.length - 1] =~ /^[0-9]$/).nil? local_str += if interval[:modifier].nil? if interval[:start][:week] == interval[:end][:week] interval[:start][:week].to_s else "#{interval[:start][:week].to_s + '-' + interval[:end][:week].to_s}" end else "#{interval[:start][:week].to_s + '-' + interval[:end][:week].to_s}/#{interval[:modifier].to_s}" end end str_result += local_str local_str = '' else result.each do |selector, intervals| if selector == 'always' intervals.each do |interval| str_result += ',' if !str_result.empty? if is_full_year?(interval) elsif starts_year?(interval) && ends_year?(interval) str_result += "#{interval[:start][:year]}-#{interval[:end][:year]}" elsif is_full_month?(interval) str_result += (OSM_MONTHS[interval[:start][:month]]).to_s elsif is_same_month?(interval) if is_same_day?(interval) str_result += "#{OSM_MONTHS[interval[:start][:month]]} #{interval[:start][:day] + 1 < 10 ? "0#{interval[:start][:day] + 1}" : interval[:start][:day] + 1}" else str_result += "#{OSM_MONTHS[interval[:start][:month]]} #{interval[:start][:day] + 1 < 10 ? "0#{interval[:start][:day] + 1}" : interval[:start][:day] + 1}-#{interval[:end][:day] + 1 < 10 ? "0#{interval[:end][:day] + 1}" : interval[:end][:day] + 1}" end elsif starts_month?(interval) && ends_month?(interval) str_result += "#{OSM_MONTHS[interval[:start][:month]]}-#{OSM_MONTHS[interval[:end][:month]]}" else str_result += "#{OSM_MONTHS[interval[:start][:month]]} #{interval[:start][:day] + 1 < 10 ? "0#{interval[:start][:day] + 1}" : interval[:start][:day] + 1}-#{OSM_MONTHS[interval[:end][:month]]} #{interval[:end][:day] + 1 < 10 ? "0#{interval[:end][:day] + 1}" : interval[:end][:day] + 1}" end end elsif selector == 'multi_year' intervals.each do |_years, intervals| intervals.each do |interval| str_result += ',' if !str_result.empty? if starts_year?(interval) && ends_year?(interval) str_result += "#{interval[:start][:year]}-#{interval[:end][:year]}" else str_result += "#{interval[:start][:year]} #{OSM_MONTHS[interval[:start][:month]]} #{interval[:start][:day] + 1 < 10 ? "0#{interval[:start][:day] + 1}" : interval[:start][:day] + 1}-#{interval[:end][:year]} #{OSM_MONTHS[interval[:end][:month]]} #{interval[:end][:day] + 1 < 10 ? "0#{interval[:end][:day] + 1}" : interval[:end][:day] + 1}" end end end else local_str = "#{selector} " intervals.each do |interval| if is_full_year?(interval) elsif is_same_month?(interval) if is_same_day?(interval) local_str += "#{local_str.length > 5 ? ',' : ''}#{OSM_MONTHS[interval[:start][:month]]} #{interval[:start][:day] + 1 < 10 ? "0#{interval[:start][:day] + 1}" : interval[:start][:day] + 1}" else local_str += "#{local_str.length > 5 ? ',' : ''}#{OSM_MONTHS[interval[:start][:month]]} #{interval[:start][:day] + 1 < 10 ? "0#{interval[:start][:day] + 1}" : interval[:start][:day] + 1}-#{interval[:end][:day] + 1 < 10 ? "0#{interval[:end][:day] + 1}" : interval[:end][:day] + 1}" end else local_str += "#{local_str.length > 5 ? ',' : ''}#{OSM_MONTHS[interval[:start][:month]]} #{interval[:start][:day] + 1 < 10 ? "0#{interval[:start][:day] + 1}" : interval[:start][:day] + 1}-#{selector} #{OSM_MONTHS[interval[:end][:month]]} #{interval[:end][:day] + 1 < 10 ? "0#{interval[:end][:day] + 1}" : interval[:end][:day] + 1}" end str_result += "#{!str_result.empty? ? ',' : ''}#{local_str}" local_str = '' end end end end str_result.strip end
same_date?(o)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 286 def same_date?(o) if o.nil? || o.date.length != @date.length false else @date.each_with_index do |d, i| return false if !d.wide_interval.equals(o.date[i].wide_interval) end true end end
same_time?(o)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 275 def same_time?(o) if o.nil? || o.time.length != @time.length || @is_defined_off != o.is_defined_off false else @time.each_with_index do |t, i| return false if !t.equals(o.time[i]) end true end end
starts_month?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 259 def starts_month?(r) r[:start][:day] == 0 end
starts_year?(r)
click to toggle source
# File lib/opening_hours_converter/opening_hours_rule.rb, line 267 def starts_year?(r) r[:start][:month] == 0 && starts_month?(r) end