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