class SimpleParams::NestedParamsClassBuilder
Public Class Methods
new(parent)
click to toggle source
# File lib/simple_params/nested_params_class_builder.rb, line 3 def initialize(parent) @parent = parent end
Public Instance Methods
build(nested_params, name, options, &block)
click to toggle source
TODO: Need to test this!
# File lib/simple_params/nested_params_class_builder.rb, line 8 def build(nested_params, name, options, &block) klass_name = name.to_s.split('_').collect(&:capitalize).join name_symbol = name.to_sym Class.new(nested_params).tap do |klass| @parent.send(:remove_const, klass_name) if @parent.const_defined?(klass_name) @parent.const_set(klass_name, klass) klass.instance_eval <<-DEF def parent_class #{@parent} end def name_symbol :#{name_symbol} end DEF klass.class_eval('extend ActiveModel::Naming') klass.class_eval(&block) klass.class_eval("self.options = #{options}") if klass.parent_class.using_rails_helpers? klass.instance_eval("with_rails_helpers") end # define a _destroy param (Boolean, default: false) if klass.using_rails_helpers? klass.send(:define_attribute, :_destroy, {type: :boolean, default: false}) end end end