lib/formulario/form.rb in formulario-0.1.8 vs lib/formulario/form.rb in formulario-0.1.9

- old
+ new

@@ -1,11 +1,11 @@ module Formulario class Form attr_accessor :model def initialize(skip_validations: false, **params) - __fields.each do |field_name, **options| + self.class.__fields.each do |field_name, **options| send("#{field_name}=", params.delete(field_name)) end params.each do |k, v| send("#{k}=", v) @@ -33,14 +33,10 @@ } new(skip_validations: true, **params) end - def __fields - @__fields ||= {} - end - def params __fields.each_with_object({}) { |field_info, res| field_name = field_info.first options = field_info.last @@ -76,18 +72,18 @@ self end private + def __fields + @__fields ||= {} + end + def self.__fields @field ||= {} end - def __fields - @__fields ||= self.class.__fields - end - def self.field(field_name, field_type=Field, default: Field.type_for(field_type).default) __fields[field_name.to_sym] = Field::UnvalidatedField.new( @@ -95,20 +91,26 @@ field_type: Field.type_for(field_type), default: default, validators: [], ) + define_method("__set_field_#{field_name}") do + __fields[field_name.to_sym] ||= self.class.__fields[field_name.to_sym].dup + end + define_method(field_name) do + send("__set_field_#{field_name}") __fields[field_name.to_sym].value end define_method("set_#{field_name}") do |raw_value| return raw_value unless Utils.empty?(raw_value) default.is_a?(Proc) ? instance_eval(&default) : default end define_method("#{field_name}=") do |raw_value| + send("__set_field_#{field_name}") __fields[field_name.to_sym].value = Field.type_for(field_type).for( send("set_#{field_name}", raw_value) ) end end