Class: ActiveFormObjects::Base

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Model, Relations, Savings
Defined in:
lib/active_form_objects.rb

Constant Summary collapse

@@authorized_params =
{}
@@overrided_params =
{}
@@default_params =
{}
@@preparers =
{}
@@resource =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params, resource = nil) ⇒ Base

Returns a new instance of Base.



64
65
66
67
68
69
70
71
72
73
# File 'lib/active_form_objects.rb', line 64

def initialize(params, resource = nil)
  @resource = resource || @@resource[self.class.name].try(:call, params).try(:new)
  set_associated_forms
  params = affect_relation_values(params)
  resource_params(params || {})

  params_with_resource_attrs = @resource.respond_to?(:attributes) ? @resource.attributes.symbolize_keys.slice(*@authorized_params).merge(@params) : @params
  params_with_preprared_value = affect_prepared_values(params_with_resource_attrs)
  super(params_with_preprared_value)
end

Instance Attribute Details

#resourceObject (readonly)

Returns the value of attribute resource.



20
21
22
# File 'lib/active_form_objects.rb', line 20

def resource
  @resource
end

Class Method Details

.attributes(*params) ⇒ Object



35
36
37
38
# File 'lib/active_form_objects.rb', line 35

def self.attributes(*params)
  @@authorized_params[name] = (@@authorized_params[name] || []) + params
  send(:attr_accessor, *params)
end

.delegate(*params) ⇒ Object



40
41
42
43
44
45
46
47
# File 'lib/active_form_objects.rb', line 40

def self.delegate(*params)
  delegator = params.last
  params.pop
  send(:attributes, *params)
  define_method("#{delegator[:to]}_params") do
    attrs_only(params)
  end
end

.ensure_value(param, value) ⇒ Object



57
58
59
60
61
62
# File 'lib/active_form_objects.rb', line 57

def self.ensure_value(param, value)
  @@overrided_params[name] ||= {}
  @@overrided_params[name][param] = value

  send(:attributes, param)
end

.prepare(*params) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/active_form_objects.rb', line 27

def self.prepare(*params)
  method_to_call = params.last[:with]
  @@preparers[name] = (@@preparers[name] || []) + [{
    key: params.first,
    method_to_call: method_to_call
  }]
end

.resource(resource = nil, &block) ⇒ Object



22
23
24
25
# File 'lib/active_form_objects.rb', line 22

def self.resource(resource = nil, &block)
  bloc_to_call = block || proc { resource }
  @@resource[name] = bloc_to_call
end

.set_default(params) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/active_form_objects.rb', line 49

def self.set_default(params)
  [params[:to]].flatten.each do |param|
    @@default_params[name] ||= {}
    @@default_params[name][param] = params[:value]
  end
  send(:attributes, *params[:to])
end

Instance Method Details

#affect_prepared_values(params) ⇒ Object



75
76
77
78
79
80
# File 'lib/active_form_objects.rb', line 75

def affect_prepared_values(params)
  (@@preparers[self.class.name] || []).each do |preparer|
    params[preparer[:key]] = params[preparer[:key]].try(preparer[:method_to_call])
  end
  params
end

#attributesObject



93
94
95
# File 'lib/active_form_objects.rb', line 93

def attributes
  instance_values.with_indifferent_access.symbolize_keys
end

#attrs_only(params) ⇒ Object



89
90
91
# File 'lib/active_form_objects.rb', line 89

def attrs_only(params)
  attributes.slice(*params)
end

#resource_params(params) ⇒ Object



82
83
84
85
86
87
# File 'lib/active_form_objects.rb', line 82

def resource_params(params)
  @default_params = @@default_params[self.class.name] || {}
  @overrided_params = @@overrided_params[self.class.name] || {}
  @authorized_params = @@authorized_params[self.class.name] || {}
  @params = @default_params.merge(params.to_h.symbolize_keys).merge(@overrided_params).slice(*@authorized_params)
end