class SimpleJsonapi::Node::RelationshipData::Base

Represents a relationship's data object.

@abstract @!attribute [r] relationship_definition

@return [Definition::Relationship]

@!attribute [r] add_to_included

@return [Boolean]

Attributes

add_to_included[R]
relationship_definition[R]

Public Class Methods

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

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

Calls superclass method SimpleJsonapi::Node::Base::new
# File lib/simple_jsonapi/node/relationship_data/base.rb, line 15
def initialize(relationship_definition:, add_to_included:, **options)
  super(options)

  @relationship_definition = relationship_definition
  @add_to_included = add_to_included

  @serializer_inferrer = relationship_definition.serializer_inferrer
  @include_spec = include_spec[relationship_name]
end

Private Instance Methods

add_resource_to_included(related_resource, linkage_node) click to toggle source
# File lib/simple_jsonapi/node/relationship_data/base.rb, line 35
def add_resource_to_included(related_resource, linkage_node)
  if add_to_included && !root_node.included_resource?(linkage_node)
    full_node = build_child_node(
      SimpleJsonapi::Node::Resource::Full,
      # Only support sorting on first-level relationships because
      #  1. supporting more levels requires more tracking of how the document is being built
      #  2. letting the API client sort a deeper relationship seems unnecessary
      sort_related: nil,
      resource: related_resource,
    )
    root_node.append_included_resource(full_node)
  end
end
build_linkage_node(related_resource) click to toggle source
# File lib/simple_jsonapi/node/relationship_data/base.rb, line 27
def build_linkage_node(related_resource)
  build_child_node(
    SimpleJsonapi::Node::Resource::Linkage,
    resource: related_resource,
    meta: { included: add_to_included },
  )
end
relationship_name() click to toggle source
# File lib/simple_jsonapi/node/relationship_data/base.rb, line 49
def relationship_name
  relationship_definition.name
end