Class: Dato::JsonApiDeserializer

Inherits:
Object
  • Object
show all
Defined in:
lib/dato/json_api_deserializer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(schema) ⇒ JsonApiDeserializer

Returns a new instance of JsonApiDeserializer.



8
9
10
# File 'lib/dato/json_api_deserializer.rb', line 8

def initialize(schema)
  @schema = schema
end

Instance Attribute Details

#schemaObject (readonly)

Returns the value of attribute schema.



6
7
8
# File 'lib/dato/json_api_deserializer.rb', line 6

def schema
  @schema
end

Instance Method Details

#deserialize(data) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/dato/json_api_deserializer.rb', line 12

def deserialize(data)
  return nil unless data

  data = data[:data]

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

#deserialize_resource(data) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/dato/json_api_deserializer.rb', line 24

def deserialize_resource(data)
  result = { id: data[:id] }
  result[:meta] = data[:meta] if data[:meta]
  result.merge!(data[:attributes]) if data[:attributes]

  if data[:relationships]
    relationships.each do |relationship, meta|
      if data[:relationships][relationship]
        rel_data = data[:relationships][relationship][:data]

        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

#relationshipsObject



52
53
54
# File 'lib/dato/json_api_deserializer.rb', line 52

def relationships
  @relationships ||= JsonSchemaRelationships.new(schema).relationships
end