Sha256: 041e828222a0289c525fc353946b5b18ea9a1253d53e543dd7c15c153a93a4ac

Contents?: true

Size: 835 Bytes

Versions: 6

Compression:

Stored size: 835 Bytes

Contents

module Dato
  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] }
      result.merge!(data[:attributes])

      relationships = data.delete(:relationships)

      if relationships
        relationships.each do |key, data|
          data = data["data"]
          value = if data.is_a? Array
                    data.map { |ref| ref["id"] }
                  elsif data.is_a? Hash
                    data[:id]
                  else
                    nil
                  end
          result[key] = value
        end
      end

      result.with_indifferent_access
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dato-0.1.5 lib/dato/json_api_deserializer.rb
dato-0.1.4 lib/dato/json_api_deserializer.rb
dato-0.1.3 lib/dato/json_api_deserializer.rb
dato-0.1.2 lib/dato/json_api_deserializer.rb
dato-0.1.1 lib/dato/json_api_deserializer.rb
dato-0.1.0 lib/dato/json_api_deserializer.rb