Class: SimpleJsonapi::Node::Included

Inherits:
Base
  • Object
show all
Defined in:
lib/simple_jsonapi/node/included.rb

Instance Attribute Summary

Attributes inherited from Base

#extras, #fields_spec, #include_spec, #root_node, #serializer, #serializer_inferrer, #sort_spec

Instance Method Summary collapse

Constructor Details

#initialize(**options) ⇒ Included

Returns a new instance of Included.

Parameters:



4
5
6
7
8
# File 'lib/simple_jsonapi/node/included.rb', line 4

def initialize(**options)
  super

  @resource_nodes = {}
end

Instance Method Details

#append_included_resource(resource_node) ⇒ Node::Resource::Full

Parameters:

Returns:



17
18
19
20
21
22
23
# File 'lib/simple_jsonapi/node/included.rb', line 17

def append_included_resource(resource_node)
  if included_resource?(resource_node)
    raise DuplicateResourceError.new(resource_node.resource_type, resource_node.resource_id)
  end

  @resource_nodes[hash_key(resource_node)] = resource_node
end

#as_jsonapiHash{Symbol => Hash}

Returns:

  • (Hash{Symbol => Hash})


26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/simple_jsonapi/node/included.rb', line 26

def as_jsonapi
  if @resource_nodes.any?
    resources_json = @resource_nodes
                     .each_value
                     .sort_by { |node| [node.resource_type, node.resource_id] }
                     .map(&:as_jsonapi)

    { included: resources_json }
  else
    {}
  end
end

#included_resource?(resource_node) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


11
12
13
# File 'lib/simple_jsonapi/node/included.rb', line 11

def included_resource?(resource_node)
  @resource_nodes.key?(hash_key(resource_node))
end