Class: JsonApi::Serializer

Inherits:
Object
  • Object
show all
Defined in:
lib/json_api_ruby/serializer.rb

Instance Method Summary collapse

Constructor Details

#initialize(object, options) ⇒ Serializer

Returns a new instance of Serializer.



23
24
25
26
27
28
29
# File 'lib/json_api_ruby/serializer.rb', line 23

def initialize(object, options)
  @meta           = options.fetch('meta', Hash.new).stringify_keys
  @object         = object
  @includes       = options.fetch('include', [])
  resource_name   = "#{@object.class.to_s.underscore}_resource".classify
  @resource_class = options.fetch('resource_class', resource_name)
end

Instance Method Details

#assemble_included_data(relationships) ⇒ Object



53
54
55
56
57
58
# File 'lib/json_api_ruby/serializer.rb', line 53

def assemble_included_data(relationships)
  relationships.flat_map do |relationship|
    next if relationship.resources.blank?
    relationship.resources.map(&:to_hash)
  end.compact
end

#to_hashObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/json_api_ruby/serializer.rb', line 31

def to_hash
  if @object.nil?
    serialized = { 'data' => nil }
  else
    resource_klass = Resources::Discovery.resource_for_name(@object, resource_class: @resource_class)
    resource       = resource_klass.new(@object, include: @includes)
    serialized     = { 'data' => resource.to_hash }
    relationships  = resource.relationships
    included_data  = assemble_included_data(relationships)

    if included_data.present?
      included_data.uniq! do |inc_data|
        inc_data['id'] + inc_data['type']
      end
      serialized['included'] = included_data
    end
  end

  serialized['meta'] = @meta if @meta.present?
  serialized
end