class NationalHolidays::Region
Attributes
cache[R]
code[R]
Public Class Methods
all()
click to toggle source
# File lib/national_holidays/region.rb, line 11 def self.all Dir.glob("#{NationalHolidays.config_directory}/*/*.yml").map do |region_filename| new(File.basename(region_filename).sub(/\.yml/, '')) end.sort_by(&:code) end
new(code)
click to toggle source
# File lib/national_holidays/region.rb, line 17 def initialize(code) @code = code.to_sym end
Public Instance Methods
all_holidays()
click to toggle source
# File lib/national_holidays/region.rb, line 25 def all_holidays holidays end
holidays_after(date)
click to toggle source
# File lib/national_holidays/region.rb, line 41 def holidays_after(date) holidays(date.next_day, nil) end
holidays_before(date)
click to toggle source
# File lib/national_holidays/region.rb, line 33 def holidays_before(date) holidays(nil, date.prev_day) end
holidays_between(start_date, end_date)
click to toggle source
# File lib/national_holidays/region.rb, line 45 def holidays_between(start_date, end_date) holidays(start_date, end_date) end
holidays_on_or_after(date)
click to toggle source
# File lib/national_holidays/region.rb, line 37 def holidays_on_or_after(date) holidays(date, nil) end
holidays_on_or_before(date)
click to toggle source
# File lib/national_holidays/region.rb, line 29 def holidays_on_or_before(date) holidays(nil, date) end
name()
click to toggle source
# File lib/national_holidays/region.rb, line 21 def name config.fetch('name') end
Private Instance Methods
config()
click to toggle source
# File lib/national_holidays/region.rb, line 72 def config return self.class.cache[code] if self.class.cache.key?(code) filename = Dir.glob("#{NationalHolidays.config_directory}/*/*.yml").sort.find do |f| File.basename(f) == "#{code}.yml" end raise NationalHolidays::UnknownRegionError, "Unknown region: #{code}" unless filename self.class.cache[code] = YAML.safe_load(File.read(filename)) end
holidays(start_date = nil, end_date = nil)
click to toggle source
# File lib/national_holidays/region.rb, line 51 def holidays(start_date = nil, end_date = nil) start_date = Date.parse(start_date.to_s).to_s if start_date end_date = Date.parse(end_date.to_s).to_s if end_date config.fetch('years').flat_map do |_, holidays| holidays.map do |holiday_config| holiday_config_date = holiday_config.fetch('date') next if start_date && start_date > holiday_config_date next if end_date && end_date < holiday_config_date Holiday.new(*holiday_config.values_at('names', 'date', 'public_holiday')) end end.compact end