class SimpleJsonapi::Node::Included

Public Class Methods

new(**options) click to toggle source

@param options see {Node::Base#initialize} for additional parameters

Calls superclass method SimpleJsonapi::Node::Base::new
# File lib/simple_jsonapi/node/included.rb, line 4
def initialize(**options)
  super

  @resource_nodes = {}
end

Public Instance Methods

append_included_resource(resource_node) click to toggle source

@param resource_node [Node::Resource::Full] @return [Node::Resource::Full]

# 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_jsonapi() click to toggle source

@return [Hash{Symbol => Hash}]

# 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) click to toggle source

@param resource_node [Node::Resource::Base]

# File lib/simple_jsonapi/node/included.rb, line 11
def included_resource?(resource_node)
  @resource_nodes.key?(hash_key(resource_node))
end

Private Instance Methods

hash_key(resource_node) click to toggle source
# File lib/simple_jsonapi/node/included.rb, line 41
def hash_key(resource_node)
  [resource_node.resource_type, resource_node.resource_id]
end