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