module Chinese::Holidays

Constants

VERSION

Public Class Methods

all() click to toggle source

List all holidays

# File lib/chinese/holidays.rb, line 9
def self.all
  self.events.select {|event| event.type == 'holiday'}
end
event(date) click to toggle source
# File lib/chinese/holidays.rb, line 29
def self.event(date)
  if date.is_a? Date
    self.load_holidays[date]
  elsif date.respond_to? :to_date
    self.load_holidays[date.to_date]
  end
end
is_holiday?(date) click to toggle source
# File lib/chinese/holidays.rb, line 13
def self.is_holiday?(date)
  event = self.event(date)

  return self.weekend?(self.to_date(date)) if event.nil?

  event.holiday?
end
is_workingday?(date) click to toggle source
# File lib/chinese/holidays.rb, line 21
def self.is_workingday?(date)
  event = self.event(date)

  return !self.weekend?(self.to_date(date)) if event.nil?

  event.workingday?
end

Private Class Methods

events() click to toggle source
# File lib/chinese/holidays.rb, line 52
def self.events
  @events ||= Dir.glob(File.expand_path('../holidays/data/*.json', __FILE__)).flat_map do |file|
    days_of_year = File.open(file) { |f| JSON.parse(f.read) }
    days_of_year.map do |days|
      Days.new(days['name'], days['range'], days['type'])
    end
  end
end
load_holidays() click to toggle source
# File lib/chinese/holidays.rb, line 61
def self.load_holidays
  @books ||= begin
    books = {}
    self.events.each do |event|
      event.days.each do |day|
        books[day] = event
      end
    end

    books
  end
end
to_date(date) click to toggle source
# File lib/chinese/holidays.rb, line 38
def self.to_date(date)
  if date.is_a? Date
    date
  elsif date.respond_to? :to_date
    date.to_date
  else
    date
  end
end
weekend?(date) click to toggle source
# File lib/chinese/holidays.rb, line 48
def self.weekend?(date)
  date.wday == 6 || date.wday == 0
end