module DrySerialization::Concerns::Deserializable
Public Instance Methods
deserialized_payload(base_params, object = nil)
click to toggle source
# File lib/dry_serialization/concerns/deserializable.rb, line 5 def deserialized_payload(base_params, object = nil) attrs = attributes(base_params) id = dig_id(base_params, object) attrs.merge!(id: id) if id build_nested_relationships(attrs, base_params) end
Private Instance Methods
attributes(base_params)
click to toggle source
# File lib/dry_serialization/concerns/deserializable.rb, line 61 def attributes(base_params) base_params.dig(:data, :attributes) end
build_nested_relationships(attrs, base_params)
click to toggle source
# File lib/dry_serialization/concerns/deserializable.rb, line 15 def build_nested_relationships(attrs, base_params) relations = relationships(base_params) attrs.merge!(transform_object_values(relations)) end
dig_id(base_params, object)
click to toggle source
# File lib/dry_serialization/concerns/deserializable.rb, line 52 def dig_id(base_params, object) return unless object base_params.dig(:data, :id) send("#{object}_id") rescue nil end
relationships(base_params)
click to toggle source
# File lib/dry_serialization/concerns/deserializable.rb, line 65 def relationships(base_params) base_params.dig(:data, :relationships) end
transform_nested_relationships_to_get_attributes(parent_relation_hash, data)
click to toggle source
# File lib/dry_serialization/concerns/deserializable.rb, line 28 def transform_nested_relationships_to_get_attributes(parent_relation_hash, data) nested_relationships = data[:data].respond_to?(:key?) ? relationships(data) : nil return unless nested_relationships nested_relationships.each do |(relation, rel_data)| hash = { "#{relation}_attributes": transform_relationships_to_get_attributes(rel_data) } parent_relation_hash.merge!(hash) end end
transform_object_values(relations)
click to toggle source
# File lib/dry_serialization/concerns/deserializable.rb, line 20 def transform_object_values(relations) relations.to_h.each_with_object({}) do |(key, data), acc| key = "#{key}_attributes" unless key.end_with?('_attributes') acc[key] ||= transform_relationships_to_get_attributes(data) transform_nested_relationships_to_get_attributes(acc[key], data) end end
transform_relationships_to_get_attributes(object)
click to toggle source
# File lib/dry_serialization/concerns/deserializable.rb, line 38 def transform_relationships_to_get_attributes(object) case object[:data] when Hash object[:attributes] || object.dig(:data, :attributes) when Array object[:data].map do |e| attrs = transform_relationships_to_get_attributes({ data: e }) attrs.merge!(transform_object_values(e[:relationships])) end else return end end