class OpeningHoursConverter::Year
Public Class Methods
build_day_array_from_date_range(date_range, get_iterator=false)
click to toggle source
# File lib/opening_hours_converter/year.rb, line 7 def self.build_day_array_from_date_range(date_range, get_iterator=false) years = {} if date_range.is_holiday? && get_iterator if !date_range.wide_interval.start.nil? && !date_range.wide_interval.start[:year].nil? if !date_range.wide_interval.end.nil? for year in date_range.wide_interval.start[:year]..date_range.wide_interval.end[:year] years[year] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } end years = process_holidays(date_range.wide_interval, years) else years[date_range.wide_interval.start[:year]] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } years = process_holidays(date_range.wide_interval, years) end else remove_holiday!(date_range) years = process_always_holiday(date_range.wide_interval, years) end end if !date_range.wide_interval.start.nil? && !date_range.wide_interval.start[:year].nil? if date_range.wide_interval.end.nil? || date_range.wide_interval.end[:year].nil? || date_range.wide_interval.start[:year] == date_range.wide_interval.end[:year] if !years[date_range.wide_interval.start[:year]].nil? years = process_single_year(date_range.wide_interval, years) else years[date_range.wide_interval.start[:year]] = Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } years = process_single_year(date_range.wide_interval, years) end else for year in date_range.wide_interval.start[:year]..date_range.wide_interval.end[:year] years[year] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } end process_multiple_years(date_range.wide_interval, years) end else unless get_iterator years["always"] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } end years = process_always(date_range.wide_interval, years, get_iterator) end years end
build_day_array_from_dates(dates, get_iterator=false)
click to toggle source
# File lib/opening_hours_converter/year.rb, line 82 def self.build_day_array_from_dates(dates, get_iterator=false) years = {} dates.each do |date| if date.wide_interval.type == 'week' if date.wide_interval.start.nil? || date.wide_interval.start[:year].nil? date.wide_interval.indexes.each do |week_index| if week_index.is_a? Integer years["always"] ||= [] years["always"] << { start: { week: week_index }, end: { week: week_index } } elsif week_index.is_a?(Hash) && week_index.key?(:modifier) # week range with modifier years["always"] ||= [] years["always"] << { start: { week: week_index[:from] }, end: { week: week_index[:to] }, modifier: week_index[:modifier] } else # week range years["always"] ||= [] years["always"] << { start: { week: week_index[:from] }, end: { week: week_index[:to] } } end end else if date.wide_interval.end.nil? || date.wide_interval.end[:year].nil? date.wide_interval.indexes.each do |week_index| if week_index.is_a? Integer years[date.wide_interval.start[:year]] ||= [] years[date.wide_interval.start[:year]] << { start: { week: week_index }, end: { week: week_index } } elsif week_index.is_a?(Hash) && week_index.key?(:modifier) # week range with modifier years[date.wide_interval.start[:year]] ||= [] years[date.wide_interval.start[:year]] << { start: { week: week_index[:from] }, end: { week: week_index[:to] }, modifier: week_index[:modifier] } else # week range years[date.wide_interval.start[:year]] ||= [] years[date.wide_interval.start[:year]] << { start: { week: week_index[:from] }, end: { week: week_index[:to] } } end end else date.wide_interval.start[:year].upto(date.wide_interval.end[:year]) do |year| date.wide_interval.indexes.each do |week_index| if week_index.is_a? Integer years[year] ||= [] years[year] << { start: { week: week_index }, end: { week: week_index } } elsif week_index.is_a?(Hash) && week_index.key?(:modifier) # week range with modifier years[year] ||= [] years[year] << { start: { week: week_index[:from] }, end: { week: week_index[:to] }, modifier: week_index[:modifier] } else # week range years[year] ||= [] years[year] << { start: { week: week_index[:from] }, end: { week: week_index[:to] } } end end end end end elsif !date.wide_interval.start.nil? && !date.wide_interval.start[:year].nil? if date.wide_interval.end.nil? || date.wide_interval.end[:year].nil? || date.wide_interval.start[:year] == date.wide_interval.end[:year] if !years[date.wide_interval.start[:year]].nil? years = process_single_year(date.wide_interval, years) else years[date.wide_interval.start[:year]] = Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } years = process_single_year(date.wide_interval, years) end else for year in date.wide_interval.start[:year]..date.wide_interval.end[:year] years[year] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } end process_multiple_years(date.wide_interval, years) end else unless get_iterator years["always"] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } end years = process_always(date.wide_interval, years, get_iterator) end end years end
process_always(wide_interval, years, get_iterator=false)
click to toggle source
# File lib/opening_hours_converter/year.rb, line 161 def self.process_always(wide_interval, years, get_iterator=false) if !get_iterator if wide_interval.start.nil? years["always"] = Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { true } } elsif !wide_interval.start[:day].nil? if wide_interval.end.nil? || (wide_interval.end[:month].nil? && wide_interval.end[:day].nil?) || (wide_interval.start[:month] == wide_interval.end[:month] && wide_interval.start[:day] == wide_interval.end[:day]) years["always"][wide_interval.start[:month]-1][wide_interval.start[:day]-1] = true elsif wide_interval.start[:month] == wide_interval.end[:month] for day in wide_interval.start[:day]-1..wide_interval.end[:day]-1 years["always"][wide_interval.start[:month]-1][day] = true end elsif wide_interval.start[:month] != wide_interval.end[:month] if wide_interval.end[:month] < wide_interval.start[:month] for month in wide_interval.start[:month]-1..11 if month == wide_interval.start[:month]-1 for day in wide_interval.start[:day]-1...MONTH_END_DAY[month] years["always"][month][day] = true end else for day in 0...MONTH_END_DAY[month] years["always"][month][day] = true end end end for month in 0..wide_interval.end[:month]-1 if month == wide_interval.end[:month]-1 for day in 0..wide_interval.end[:day]-1 years["always"][month][day] = true end else for day in 0...MONTH_END_DAY[month] years["always"][month][day] = true end end end else for month in wide_interval.start[:month]-1..wide_interval.end[:month]-1 if month == wide_interval.start[:month]-1 for day in wide_interval.start[:day]-1...MONTH_END_DAY[month] years["always"][month][day] = true end elsif month == wide_interval.end[:month]-1 for day in 0..wide_interval.end[:day]-1 years["always"][month][day] = true end else for day in 0...MONTH_END_DAY[month] years["always"][month][day] = true end end end end end elsif !wide_interval.start[:month].nil? if wide_interval.end.nil? || wide_interval.end[:month].nil? || wide_interval.start[:month] == wide_interval.end[:month] years["always"][wide_interval.start[:month]-1].each_with_index do |month, i| years["always"][wide_interval.start[:month]-1][i] = true end else for month in wide_interval.start[:month]-1..wide_interval.end[:month]-1 years["always"][month].each_with_index do |day, i| years["always"][month][i] = true end end end end else for year in (DateTime.now.year)..(DateTime.now.year + 1) if wide_interval.start.nil? years[year] = Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { true } } elsif !wide_interval.start[:day].nil? years[year] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } if wide_interval.end.nil? || (wide_interval.end[:month].nil? && wide_interval.end[:day].nil?) || (wide_interval.start[:month] == wide_interval.end[:month] && wide_interval.start[:day] == wide_interval.end[:day]) years[year][wide_interval.start[:month]-1][wide_interval.start[:day]-1] = true elsif wide_interval.start[:month] == wide_interval.end[:month] for day in wide_interval.start[:day]-1..wide_interval.end[:day]-1 years[year][wide_interval.start[:month]-1][day] = true end elsif wide_interval.start[:month] != wide_interval.end[:month] for month in wide_interval.start[:month]-1..wide_interval.end[:month]-1 if month == wide_interval.start[:month]-1 for day in wide_interval.start[:day]-1...MONTH_END_DAY[month] years[year][month][day] = true end elsif month == wide_interval.end[:month]-1 for day in 0..wide_interval.end[:day]-1 years[year][month][day] = true end else for day in 0...MONTH_END_DAY[month] years[year][month][day] = true end end end end elsif !wide_interval.start[:month].nil? years[year] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } if wide_interval.end.nil? || wide_interval.end[:month].nil? || wide_interval.start[:month] == wide_interval.end[:month] years[year][wide_interval.start[:month]-1].each_with_index do |month, i| years[year][wide_interval.start[:month]-1][i] = true end else for month in wide_interval.start[:month]-1..wide_interval.end[:month]-1 years[year][month].each_with_index do |day, i| years[year][month][i] = true end end end end end end return years end
process_always_holiday(wide_interval, years)
click to toggle source
# File lib/opening_hours_converter/year.rb, line 66 def self.process_always_holiday(wide_interval, years) for year in (DateTime.now.year)..(DateTime.now.year + 1) years[year] ||= Array.new(OSM_MONTHS.length) { |i| Array.new(MONTH_END_DAY[i]) { false } } PublicHoliday.ph_for_year(year).each do |ht| years[year][ht.month-1][ht.day-1] = true end end years end
process_holidays(wide_interval, years)
click to toggle source
# File lib/opening_hours_converter/year.rb, line 50 def self.process_holidays(wide_interval, years) if !wide_interval.end.nil? && !wide_interval.end[:year].nil? holidays = {} for year in wide_interval.start[:year]..wide_interval.end[:year] PublicHoliday.ph_for_year(year).each do |ht| years[year][ht.month-1][ht.day-1] = true end end else PublicHoliday.ph_for_year(wide_interval.start[:year]).each do |ht| years[wide_interval.start[:year]][ht.month-1][ht.day-1] = true end end years end
process_multiple_years(wide_interval, years)
click to toggle source
# File lib/opening_hours_converter/year.rb, line 277 def self.process_multiple_years(wide_interval, years) if wide_interval.type == "year" for year in wide_interval.start[:year]..wide_interval.end[:year] years[year].each_with_index do |month,i| month.each_with_index do |day,j| years[year][i][j] = true end end end elsif wide_interval.type == "month" for year in wide_interval.start[:year]..wide_interval.end[:year] if year == wide_interval.start[:year] for month in wide_interval.start[:month]-1..11 years[year][month].each_with_index do |day, i| years[year][month][i] = true end end elsif year == wide_interval.end[:year] for month in 0..wide_interval.end[:month]-1 years[year][month].each_with_index do |day, i| years[year][month][i] = true end end else for month in 0..11 years[year][month].each_with_index do |day, i| years[year][month][i] = true end end end end elsif wide_interval.type == "day" for year in wide_interval.start[:year]..wide_interval.end[:year] if year == wide_interval.start[:year] for month in wide_interval.start[:month]-1..11 if month == wide_interval.start[:month]-1 for day in wide_interval.start[:day]-1...MONTH_END_DAY[month] years[year][month][day] = true end else for day in 0...MONTH_END_DAY[month] years[year][month][day] = true end end end elsif year == wide_interval.end[:year] for month in 0..wide_interval.end[:month]-1 if month == wide_interval.end[:month]-1 for day in 0..wide_interval.end[:day]-1 years[year][month][day] = true end else for day in 0...MONTH_END_DAY[month] years[year][month][day] = true end end end else for month in 0..11 for day in 0...MONTH_END_DAY[month] years[year][month][day] = true end end end end end return years end
process_single_year(wide_interval, years, always=false)
click to toggle source
# File lib/opening_hours_converter/year.rb, line 346 def self.process_single_year(wide_interval, years, always=false) if wide_interval.type == "year" years[wide_interval.start[:year]].each_with_index do |month,i| month.each_with_index do |day,j| years[wide_interval.start[:year]][i][j] = true end end elsif wide_interval.type == "month" if wide_interval.end.nil? || wide_interval.end[:month].nil? || wide_interval.start[:month] == wide_interval.end[:month] years[wide_interval.start[:year]][wide_interval.start[:month]-1].each_with_index do |month, i| years[wide_interval.start[:year]][wide_interval.start[:month]-1][i] = true end else for month in wide_interval.start[:month]-1..wide_interval.end[:month]-1 years[wide_interval.start[:year]][month].each_with_index do |day, i| years[wide_interval.start[:year]][month][i] = true end end end elsif wide_interval.type == "day" if wide_interval.end.nil? || !wide_interval.end.nil? && wide_interval.start[:month] == wide_interval.end[:month] if wide_interval.end.nil? || !wide_interval.end.nil? && wide_interval.start[:day] == wide_interval.end[:day] years[wide_interval.start[:year]][wide_interval.start[:month]-1][wide_interval.start[:day]-1] = true else for day in wide_interval.start[:day]-1..wide_interval.end[:day]-1 years[wide_interval.start[:year]][wide_interval.start[:month]-1][day] = true end end else for month in wide_interval.start[:month]-1..wide_interval.end[:month]-1 if month == wide_interval.start[:month]-1 for day in wide_interval.start[:day]-1...MONTH_END_DAY[month] years[wide_interval.start[:year]][month][day] = true end elsif month == wide_interval.end[:month]-1 for day in 0..wide_interval.end[:day]-1 years[wide_interval.start[:year]][month][day] = true end else for day in 0...MONTH_END_DAY[month] years[wide_interval.start[:year]][month][day] = true end end end end end return years end
remove_holiday!(date_range)
click to toggle source
# File lib/opening_hours_converter/year.rb, line 76 def self.remove_holiday!(date_range) date_range.typical.intervals.each_with_index do |interval, interval_index| date_range.typical.remove_interval(interval_index) if interval.day_start == -2 && interval.day_end == -2 end end