class SimpleJsonapi::Node::Document::Base

Represents a JSONAPI document. @abstract

Public Class Methods

new(links: nil, meta: nil, **options) click to toggle source

@param links [Hash{Symbol => String,Hash}] @param meta [Hash{Symbol => Object}] @param options see {Node::Base#initialize} for additional parameters

Calls superclass method SimpleJsonapi::Node::Base::new
# File lib/simple_jsonapi/node/document/base.rb, line 8
def initialize(links: nil, meta: nil, **options)
  @data_node = @links_json = @meta_json = @errors_node = nil

  super(options.merge(root_node: self))
  validate_options!(options.merge(links: links, meta: meta))

  @links_json = links if links&.any?
  @meta_json = meta if meta&.any?
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/document/base.rb, line 40
def append_included_resource(resource_node)
  included_node.append_included_resource(resource_node)
end
as_jsonapi() click to toggle source

@return [Hash{Symbol => Hash}]

# File lib/simple_jsonapi/node/document/base.rb, line 19
def as_jsonapi
  doc = {}

  doc.merge!(@data_node.as_jsonapi) if @data_node
  doc.merge!(@errors_node.as_jsonapi) if @errors_node
  doc.merge!(included_node.as_jsonapi)
  doc[:links] = @links_json if @links_json
  doc[:meta] = @meta_json if @meta_json
  # jsonapi

  doc
end
included_resource?(resource_node) click to toggle source

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

# File lib/simple_jsonapi/node/document/base.rb, line 34
def included_resource?(resource_node)
  included_node.included_resource?(resource_node)
end

Private Instance Methods

included_node() click to toggle source
# File lib/simple_jsonapi/node/document/base.rb, line 58
def included_node
  @included_node ||= build_child_node(SimpleJsonapi::Node::Included)
end
validate_options!(options) click to toggle source
# File lib/simple_jsonapi/node/document/base.rb, line 46
def validate_options!(options)
  links, meta = options.values_at(:links, :meta)

  unless links.nil? || links.is_a?(Hash)
    raise ArgumentError, "Expected links to be NilClass or Hash but got #{links.class.name}"
  end

  unless meta.nil? || meta.is_a?(Hash)
    raise ArgumentError, "Expected meta to be NilClass or Hash but got #{meta.class.name}"
  end
end