Class: ActiveFormObjects::Base
- Inherits:
-
Object
- Object
- ActiveFormObjects::Base
- Includes:
- ActiveModel::Model, Relations, Savings
- Defined in:
- lib/active_form_objects.rb
Constant Summary collapse
{}
- @@overrided_params =
{}
- @@default_params =
{}
- @@preparers =
{}
- @@resource =
{}
Instance Attribute Summary collapse
-
#resource ⇒ Object
readonly
Returns the value of attribute resource.
Class Method Summary collapse
- .attributes(*params) ⇒ Object
- .delegate(*params) ⇒ Object
- .ensure_value(param, value) ⇒ Object
- .prepare(*params) ⇒ Object
- .resource(resource = nil, &block) ⇒ Object
- .set_default(params) ⇒ Object
Instance Method Summary collapse
- #affect_prepared_values(params) ⇒ Object
- #attributes ⇒ Object
- #attrs_only(params) ⇒ Object
-
#initialize(params, resource = nil) ⇒ Base
constructor
A new instance of Base.
- #resource_params(params) ⇒ Object
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
#resource ⇒ Object (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 |
#attributes ⇒ Object
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 |