Module: Tramway::Core::ExtendableFormsHelpers::ClassBuilder

Included in:
Tramway::Core::ExtendableForm
Defined in:
app/forms/tramway/core/extendable_forms_helpers/class_builder.rb

Instance Method Summary collapse

Instance Method Details

#build_form_class(name, simple_properties, more_properties) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/forms/tramway/core/extendable_forms_helpers/class_builder.rb', line 4

def build_form_class(name, simple_properties, more_properties)
  Object.const_set(name, Class.new(::Tramway::Core::ApplicationForm) do
    properties(*simple_properties.keys) if simple_properties.keys.any?

    include Tramway::Core::ExtendableFormsHelpers::Submit::ObjectHelpers
    include Tramway::Core::ExtendableFormsHelpers::Validators
    extend Tramway::Core::ExtendableFormsHelpers::Submit::ClassHelpers
    extend Tramway::Core::ExtendableFormsHelpers::PropertiesHelper
    extend Tramway::Core::ExtendableFormsHelpers::MorePropertiesHelper
    extend Tramway::Core::ExtendableFormsHelpers::IgnoredPropertiesHelper

    define_submit_method simple_properties, more_properties
    define_properties_method simple_properties, more_properties
    define_ignored_properties_method

    more_properties.each do |property|
      define_property_method property[0]

      case property[1][:object].field_type
      when 'file'
        field = property[1][:object]
        define_file_property_assignment_method property, field
      else
        # next unless property[1][:validates].present?

        define_assignment_method property
      end
    end
  end)
end