def self.create_with(data)
rule = Rule.new(data)
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