lib/dato/json_api_deserializer.rb in dato-0.6.12 vs lib/dato/json_api_deserializer.rb in dato-0.6.14

- old
+ new

@@ -1,9 +1,16 @@ # frozen_string_literal: true +require 'dato/json_schema_relationships' module Dato class JsonApiDeserializer + attr_reader :link + + def initialize(link) + @link = link + end + def deserialize(data) return nil unless data data = data[:data] @@ -18,23 +25,39 @@ result = { id: data[:id] } result[:meta] = data[:meta] if data[:meta] result.merge!(data[:attributes]) if data[:attributes] - relationships = data.delete(:relationships) + if data[:relationships] + relationships.each do |relationship, meta| + if data[:relationships][relationship] + rel_data = data[:relationships][relationship][:data] - if relationships - relationships.each do |key, handle| - handle_data = handle['data'] - value = if handle_data.is_a? Array - handle_data.map { |ref| ref['id'] } - elsif handle_data.is_a? Hash - handle_data[:id] - end - result[key] = value + result[relationship] = if meta[:types].length > 1 + rel_data + else + if !rel_data + nil + elsif meta[:collection] + rel_data.map { |ref| ref[:id] } + else + rel_data[:id] + end + end + end end end result.with_indifferent_access + end + + def relationships + @relationships ||= JsonSchemaRelationships.new(link_relationships).relationships + end + + def link_relationships + if link.target_schema + link.target_schema.properties['data'].properties['relationships'] + end end end end