module Feriados::Rules

Public Class Methods

create_with(rule) click to toggle source
# File lib/feriados/rules.rb, line 57
def self.create_with(rule)
  rule = Rule.new(rule)
  return DayOfMonth.new(rule.day, rule.month, rule.name) if rule.day_of_month?
  return FixWeekDay.new(rule.week, rule.day, rule.month, rule.name) if rule.week_day?
  return FixDate.new(rule.year, rule.month, rule.day, rule.name) if rule.fix_date?

  raise ArgumentError, "Argument #{rule} is not a valid rule" unless rule.function?

  function_name = rule.function_name
  class_name = "Feriados::Rules::#{function_name}".split('::')
  klass = class_name.inject(Object) { |obj, const| obj.const_get(const) }
  klass.name = rule.name

  klass
end