class Holidays::Definition::Parser::Test

Public Class Methods

new(validator) click to toggle source
# File lib/holidays/definition/parser/test.rb, line 7
def initialize(validator)
  @validator = validator
end

Public Instance Methods

call(tests) click to toggle source
# File lib/holidays/definition/parser/test.rb, line 11
def call(tests)
  return [] if tests.nil?

  validate!(tests)

  tests.map do |t|
    given = t["given"]
    expect = t["expect"]

    Entity::Test.new(
      dates: parse_dates(given["date"]),
      regions: parse_regions(given["regions"]),
      options: parse_options(given["options"]),
      name: expect["name"],
      holiday?: is_holiday?(expect["holiday"]),
    )
  end
end

Private Instance Methods

is_holiday?(flag) click to toggle source

If flag is not present then default to ‘true’

# File lib/holidays/definition/parser/test.rb, line 80
def is_holiday?(flag)
  flag.nil? ? true : !!flag
end
parse_dates(dates) click to toggle source
# File lib/holidays/definition/parser/test.rb, line 51
def parse_dates(dates)
  unless dates.is_a?(Array)
    dates = [ dates ]
  end

  dates.map do |d|
    DateTime.parse(d)
  end
end
parse_options(options) click to toggle source
# File lib/holidays/definition/parser/test.rb, line 67
def parse_options(options)
  if options
    if options.is_a?(Array)
      options.map do |o|
        o.to_sym
      end
    else
      [ options.to_sym ]
    end
  end
end
parse_regions(regions) click to toggle source
# File lib/holidays/definition/parser/test.rb, line 61
def parse_regions(regions)
  regions.map do |r|
    r.to_sym
  end
end
validate!(tests) click to toggle source
# File lib/holidays/definition/parser/test.rb, line 32
def validate!(tests)
  raise ArgumentError unless tests.all? do |t|
    dates = t["given"]["date"]
    unless dates.is_a?(Array)
      dates = [ dates ]
    end

    @validator.valid?(
      {
        :dates => dates,
        :regions => t["given"]["regions"],
        :options => t["given"]["options"],
        :name => t["expect"]["name"],
        :holiday => t["expect"]["holiday"],
      }
    )
  end
end