Sha256: 25bb0882dddbfb2e07c1f1afced7707eb7a8467d6246d2b75e0b0ba112e1330f

Contents?: true

Size: 897 Bytes

Versions: 4

Compression:

Stored size: 897 Bytes

Contents

# frozen_string_literal: true
module Agave
  class JsonApiDeserializer
    def deserialize(data)
      data = data[:data]

      if data.is_a? Array
        data.map { |resource| deserialize_resource(resource) }
      else
        deserialize_resource(data)
      end
    end

    def deserialize_resource(data)
      result = { id: data[:id] }

      if data[:attributes]
        result.merge!(data[:attributes])
      end

      relationships = data.delete(:relationships)

      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
        end
      end

      result.with_indifferent_access
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
agave-client-0.1.3 lib/agave/json_api_deserializer.rb
agave-client-0.1.2 lib/agave/json_api_deserializer.rb
agave-client-0.1.1 lib/agave/json_api_deserializer.rb
agave-client-0.1.0 lib/agave/json_api_deserializer.rb