Module: Graphiti::SerializableHash

Included in:
Serializer
Defined in:
lib/graphiti/hash_renderer.rb

Instance Method Summary collapse

Instance Method Details

#to_hash(fields: nil, include: {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/graphiti/hash_renderer.rb', line 3

def to_hash(fields: nil, include: {})
  {}.tap do |hash|
    fields_list = fields[jsonapi_type] if fields
    attrs = requested_attributes(fields_list).each_with_object({}) { |(k, v), h|
      h[k] = instance_eval(&v)
    }
    rels = @_relationships.select { |k, v| !!include[k] }
    rels.each_with_object({}) do |(k, v), h|
      serializers = v.send(:resources)
      attrs[k] = if serializers.is_a?(Array)
        serializers.map do |rr| # use private method to avoid array casting
          rr.to_hash(fields: fields, include: include[k])
        end
      elsif serializers.nil?
        nil
      else
        serializers.to_hash(fields: fields, include: include[k])
      end
    end

    hash[:id] = jsonapi_id
    hash.merge!(attrs) if attrs.any?
  end
end