Class: SimpleParams::NestedParamsClassBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_params/nested_params_class_builder.rb

Instance Method Summary collapse

Constructor Details

#initialize(parent) ⇒ NestedParamsClassBuilder

Returns a new instance of NestedParamsClassBuilder.



3
4
5
# File 'lib/simple_params/nested_params_class_builder.rb', line 3

def initialize(parent)
  @parent = parent
end

Instance Method Details

#build(nested_params, name, options, &block) ⇒ Object

TODO: Need to test this!



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 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
  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
    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