Class: Tramway::Core::ApplicationForm

Inherits:
Object
  • Object
show all
Extended by:
Tramway::Core::ApplicationForms::AssociationClassHelpers, Tramway::Core::ApplicationForms::ConstantClassActions
Includes:
Tramway::Core::ApplicationForms::AssociationObjectHelpers, Tramway::Core::ApplicationForms::ConstantObjectActions, Tramway::Core::ApplicationForms::ObjectHelpers, Tramway::Core::ApplicationForms::PropertiesObjectHelper, Tramway::Core::ApplicationForms::SubmitHelper
Defined in:
app/forms/tramway/core/application_form.rb

Direct Known Subclasses

ExtendedApplicationForm

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(object = nil) ⇒ ApplicationForm

Returns a new instance of ApplicationForm.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/forms/tramway/core/application_form.rb', line 12

def initialize(object = nil)
  tap do
    @object = object
    @@model_class = object.class
    @@enumerized_attributes = object.class.try :enumerized_attributes
    @@associations ||= []

    self.class.full_class_name_associations&.each do |association, class_name|
      define_association_method association, class_name
    end

    delegating object
  end
end

Instance Attribute Details

#submit_messageObject

Returns the value of attribute submit_message.



10
11
12
# File 'app/forms/tramway/core/application_form.rb', line 10

def submit_message
  @submit_message
end

Class Method Details

.add_polymorphic_association(hash, association, options) ⇒ Object



68
69
70
71
72
73
74
75
76
# File 'app/forms/tramway/core/application_form.rb', line 68

def add_polymorphic_association(hash, association, options)
  if options&.dig(:polymorphic)
    hash.merge association => @@model_class.send("#{association}_type").values
  elsif options
    hash.merge(association => (options[:class_name] || association.to_s.camelize).constantize)
  else
    hash
  end
end

.association(property) ⇒ Object



54
55
56
57
# File 'app/forms/tramway/core/application_form.rb', line 54

def association(property)
  properties property
  @@associations = ((defined?(@@associations) && @@associations) || []) + [property]
end

.enumerized_attributesObject



86
87
88
# File 'app/forms/tramway/core/application_form.rb', line 86

def enumerized_attributes
  @@enumerized_attributes
end

.full_class_name_association(association_name) ⇒ Object



78
79
80
# File 'app/forms/tramway/core/application_form.rb', line 78

def full_class_name_association(association_name)
  full_class_name_associations[association_name]
end

.full_class_name_associationsObject



59
60
61
62
63
64
65
66
# File 'app/forms/tramway/core/application_form.rb', line 59

def full_class_name_associations
  @@associations&.reduce({}) do |hash, association|
    options = @@model_class.reflect_on_all_associations(:belongs_to).select do |a|
      a.name == association.to_sym
    end.first&.options
    add_polymorphic_association hash, association, options
  end
end

.model_classObject



90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'app/forms/tramway/core/application_form.rb', line 90

def model_class
  if defined?(@@model_class) && @@model_class
    @@model_class
  else
    model_class_name ||= name.to_s.sub(/Form$/, '')
    begin
      @@model_class = model_class_name.constantize
    rescue StandardError
      Tramway::Error.raise_error :tramway, :core, :application_form, :model_class, :there_is_not_model_class,
        name: name, model_class_name: model_class_name
    end
  end
end

.model_class=(name) ⇒ Object



104
105
106
# File 'app/forms/tramway/core/application_form.rb', line 104

def model_class=(name)
  @@model_class = name
end

.properties(*props) ⇒ Object



41
42
43
# File 'app/forms/tramway/core/application_form.rb', line 41

def properties(*props)
  props.each { |prop| property prop }
end

.property(prop) ⇒ Object



45
46
47
48
49
50
51
52
# File 'app/forms/tramway/core/application_form.rb', line 45

def property(prop)
  @@properties ||= []
  @@properties << prop
  delegate prop, to: :model
  define_method("#{prop}=") do |value|
    model.send "#{prop}=", value
  end
end

.reflect_on_association(*args) ⇒ Object



82
83
84
# File 'app/forms/tramway/core/application_form.rb', line 82

def reflect_on_association(*args)
  @@model_class.reflect_on_association(*args)
end

.validates(attribute, **options) ⇒ Object



108
109
110
111
112
113
# File 'app/forms/tramway/core/application_form.rb', line 108

def validates(attribute, **options)
  if !defined?(@@model_class) || @@model_class.nil?
    Tramway::Error.raise_error(:tramway, :core, :application_form, :validates, :you_need_to_set_model_class)
  end
  @@model_class.validates attribute, **options
end

Instance Method Details

#associationsObject



31
32
33
# File 'app/forms/tramway/core/application_form.rb', line 31

def associations
  @@associations
end

#model_nameObject



27
28
29
# File 'app/forms/tramway/core/application_form.rb', line 27

def model_name
  @@model_class.model_name
end