Class: JsonApi::Serializer

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

Direct Known Subclasses

CollectionSerializer, ObjectSerializer

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(object, options) ⇒ Serializer

Returns a new instance of Serializer.



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

def initialize(object, options)
  @meta           = options.fetch('meta', Hash.new).stringify_keys
  @object         = object
  @includes       = options.fetch('include', Includes.new)
  @resource_class = options.fetch('resource_class', nil)
end

Instance Attribute Details

#objectObject (readonly)

Returns the value of attribute object.



23
24
25
# File 'lib/json_api_ruby/serializer.rb', line 23

def object
  @object
end

Instance Method Details

#assemble_included_data(included_resources) ⇒ Object



39
40
41
# File 'lib/json_api_ruby/serializer.rb', line 39

def assemble_included_data(included_resources)
  included_resources.map(&:to_hash)
end

#find_included_resources(object_resource) ⇒ Object



43
44
45
46
47
# File 'lib/json_api_ruby/serializer.rb', line 43

def find_included_resources(object_resource)
  included_resources = object_resource.relationships.select {|rel| rel.included?}.flat_map {|rel| rel.resources }
  included_resources += included_resources.flat_map {|res| find_included_resources(res) }
  included_resources.flatten
end

#resource(object) ⇒ Object



32
33
34
35
36
37
# File 'lib/json_api_ruby/serializer.rb', line 32

def resource(object)
  resource_name  = "#{object.class.to_s.underscore}_resource".classify
  klass_name     = @resource_class || resource_name
  resource_klass = Resources::Discovery.resource_for_name(object, resource_class: klass_name)
  resource_klass.new(object, include: Includes.parse_includes(@includes))
end

#unique_identifiers!(resources) ⇒ Object



49
50
51
52
# File 'lib/json_api_ruby/serializer.rb', line 49

def unique_identifiers!(resources)
  resources.uniq! { |rel| rel.id + rel.type }
  resources
end