class JSONApi::Deserializer
Constants
- VERSION
Public Class Methods
new(response)
click to toggle source
# File lib/jsonapi_deserializer.rb, line 62 def initialize(response) @response = response.is_a?(Hash) ? response.with_indifferent_access : response @store = Store.new all_data = ([] << @response[:data] << @response[:included]).flatten.compact store_records(all_data) build_associations(all_data) end
Public Instance Methods
deserialized_hash()
click to toggle source
# File lib/jsonapi_deserializer.rb, line 71 def deserialized_hash data = @response[:data] if data.is_a? Array data.map { |datum| @store.get(datum[:type], datum[:id], datum[:lid]) } else @store.get(data[:type], data[:id], data[:lid]) end end
Private Instance Methods
build_associations(data)
click to toggle source
# File lib/jsonapi_deserializer.rb, line 94 def build_associations(data) data.each do |datum| record = @store.get(datum[:type], datum[:id], datum[:lid]) relationships = datum[:relationships] || {} relationships.each do |relationship_name, relationship| if relationship[:data].is_a? Array record[relationship_name] = relationship[:data].map { |assoc| find_association(assoc) } else record[relationship_name] = find_association(relationship[:data]) end end end end
find_association(association)
click to toggle source
# File lib/jsonapi_deserializer.rb, line 89 def find_association(association) return nil unless association @store.get(association[:type], association[:id], association[:lid]) || Assocation.new(association) end
store_records(data)
click to toggle source
# File lib/jsonapi_deserializer.rb, line 82 def store_records(data) data.each do |datum| record = Record.new(id: datum[:id], lid: datum[:lid]).merge(datum[:attributes] || {}) @store.set(datum[:type], datum[:id], datum[:lid], record) end end