class SimpleJsonapi::Node::Relationship

Represents a single relationship object.

@!attribute [r] resource

@return [Object]

@!attribute [r] relationship_definition

@return [Definition::Relationship]

Attributes

relationship_definition[R]
resource[R]

Public Class Methods

new(resource:, relationship_definition:, **options) click to toggle source

@param resource [Object] @param relationship_definition [Definition::Relationship] @param options see {Node::Base#initialize} for additional parameters

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

  @resource = resource
  @relationship_definition = relationship_definition

  if relationship_definition.singular?
    @data_node = build_child_node(
      SimpleJsonapi::Node::RelationshipData::Singular,
      relationship_definition: relationship_definition,
      resource: related_data,
      add_to_included: add_to_included?,
    )
  elsif relationship_definition.collection?
    @data_node = build_child_node(
      SimpleJsonapi::Node::RelationshipData::Collection,
      relationship_definition: relationship_definition,
      resources: related_data,
      add_to_included: add_to_included?,
    )
  end

  @links_node = build_child_node(
    SimpleJsonapi::Node::ObjectLinks,
    object: resource,
    link_definitions: relationship_definition.link_definitions,
  )

  @meta_node = build_child_node(
    SimpleJsonapi::Node::ObjectMeta,
    object: resource,
    meta_definitions: relationship_definition.meta_definitions,
  )
end

Public Instance Methods

as_jsonapi() click to toggle source

@return [Hash{Symbol => Hash}]

# File lib/simple_jsonapi/node/relationship.rb, line 55
def as_jsonapi
  rel_json = {}

  rel_json.merge!(@data_node.as_jsonapi) if @data_node
  rel_json.merge!(@links_node.as_jsonapi) if @links_node
  rel_json.merge!(@meta_node.as_jsonapi) if @meta_node

  rel_json
end
relationship_name() click to toggle source

@return [String]

# File lib/simple_jsonapi/node/relationship.rb, line 50
def relationship_name
  relationship_definition.name
end

Private Instance Methods

add_to_included?() click to toggle source
# File lib/simple_jsonapi/node/relationship.rb, line 75
def add_to_included?
  include_spec.include?(relationship_name)
end