Module: JSONAPI::Serialization::ModelAttributesTransformation
- Included in:
- Deserializer
- Defined in:
- lib/json_api/serialization/concerns/model_attributes_transformation.rb
Instance Method Summary collapse
- #apply_virtual_attribute_transformers(attrs) ⇒ Object
- #call_setters(attrs, definition_instance) ⇒ Object
- #create_definition_instance_for_setters ⇒ Object
- #has_setter?(definition_instance, attr_sym) ⇒ Boolean
- #invoke_setter_methods(attrs) ⇒ Object
- #merge_transformed_params(attrs, transformed_params) ⇒ Object
- #process_relationships(attrs) ⇒ Object
- #to_model_attributes ⇒ Object
Instance Method Details
#apply_virtual_attribute_transformers(attrs) ⇒ Object
13 14 15 16 17 18 |
# File 'lib/json_api/serialization/concerns/model_attributes_transformation.rb', line 13 def apply_virtual_attribute_transformers(attrs) transformed_params, attributes_with_setters = invoke_setter_methods(attrs) attributes_with_setters.each { |attr_sym| attrs.delete(attr_sym) } merge_transformed_params(attrs, transformed_params) attrs end |
#call_setters(attrs, definition_instance) ⇒ Object
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/json_api/serialization/concerns/model_attributes_transformation.rb', line 53 def call_setters(attrs, definition_instance) attributes_with_setters = [] attrs.each do |attr_sym, attr_value| next unless has_setter?(definition_instance, attr_sym) definition_instance.public_send(:"#{attr_sym}=", attr_value) attributes_with_setters << attr_sym end attributes_with_setters end |
#create_definition_instance_for_setters ⇒ Object
49 50 51 |
# File 'lib/json_api/serialization/concerns/model_attributes_transformation.rb', line 49 def create_definition_instance_for_setters @definition.new(nil, {}) end |
#has_setter?(definition_instance, attr_sym) ⇒ Boolean
64 65 66 |
# File 'lib/json_api/serialization/concerns/model_attributes_transformation.rb', line 64 def has_setter?(definition_instance, attr_sym) definition_instance.respond_to?(:"#{attr_sym}=", false) end |
#invoke_setter_methods(attrs) ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/json_api/serialization/concerns/model_attributes_transformation.rb', line 41 def invoke_setter_methods(attrs) definition_instance = create_definition_instance_for_setters return [{}, []] unless definition_instance.respond_to?(:transformed_params, true) attributes_with_setters = call_setters(attrs, definition_instance) [definition_instance.transformed_params, attributes_with_setters] end |
#merge_transformed_params(attrs, transformed_params) ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/json_api/serialization/concerns/model_attributes_transformation.rb', line 20 def merge_transformed_params(attrs, transformed_params) return attrs unless transformed_params.is_a?(Hash) && transformed_params.any? transformed_params_symbolized = transformed_params.transform_keys(&:to_sym) attrs.merge!(transformed_params_symbolized) attrs end |
#process_relationships(attrs) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/json_api/serialization/concerns/model_attributes_transformation.rb', line 28 def process_relationships(attrs) permitted_relationships = @definition.relationship_names.map(&:to_s) relationships.each do |key, value| association_name = key.to_s next unless permitted_relationships.include?(association_name) process_relationship(attrs, association_name, value) end attrs end |
#to_model_attributes ⇒ Object
6 7 8 9 10 11 |
# File 'lib/json_api/serialization/concerns/model_attributes_transformation.rb', line 6 def to_model_attributes attrs = attributes.dup attrs = apply_virtual_attribute_transformers(attrs) attrs = process_relationships(attrs) attrs.transform_keys(&:to_s) end |