lib/reform/form/active_model.rb in reform-2.0.0.rc3 vs lib/reform/form/active_model.rb in reform-2.0.0
- old
+ new
@@ -1,56 +1,15 @@
-require 'reform/form/active_model/model_validations'
+require "reform/form/active_model/model_validations"
+require "reform/form/active_model/form_builder_methods"
+require "uber/delegates"
module Reform::Form::ActiveModel
- module FormBuilderMethods # TODO: rename to FormBuilderCompat.
- def self.included(base)
- base.extend ClassMethods # ::model_name
- end
-
- module ClassMethods
- private
-
- # TODO: add that shit in Form#present, not by overriding ::property.
- def property(name, options={}, &block)
- super.tap do |definition|
- add_nested_attribute_compat(name) if definition[:twin] # TODO: fix that in Rails FB#1832 work.
- end
- end
-
- # The Rails FormBuilder "detects" nested attributes (which is what we want) by checking existance of a setter method.
- def add_nested_attribute_compat(name)
- define_method("#{name}_attributes=") {} # this is why i hate respond_to? in Rails.
- end
- end
-
- # Modify the incoming Rails params hash to be representable compliant.
- def deserialize!(params)
- # this only happens in a Hash environment. other engines have to overwrite this method.
- schema.each do |dfn|
- rename_nested_param_for!(params, dfn)
- end
-
- super(params)
- end
-
- private
- def rename_nested_param_for!(params, dfn)
- nested_name = "#{dfn.name}_attributes"
- return unless params.has_key?(nested_name)
-
- value = params["#{dfn.name}_attributes"]
- value = value.values if dfn[:collection]
-
- params[dfn.name] = value
- end
- end # FormBuilderMethods
-
-
def self.included(base)
base.class_eval do
extend ClassMethods
register_feature ActiveModel
+ extend Uber::Delegates
delegates :model, *[:persisted?, :to_key, :to_param, :id] # Uber::Delegates
def to_model # this is called somewhere in FormBuilder and ActionController.
self
end