class SimpleJsonapi::Node::Relationships

Represents a resource's relationships object, which contains the individual relationship object.

@!attribute [r] resource

@return [Object]

@!attribute [r] resource_type

@return [String]

@!attribute [r] relationship_definitions

@return [Hash{Symbol => Definition::Relationship}]

Attributes

relationship_definitions[R]
resource[R]
resource_type[R]

Public Class Methods

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

@param resource [Object] @param resource_type [String] @param relationship_definitions [Hash{Symbol => Definition::Relationship}] @param options see {Node::Base#initialize} for additional parameters

Calls superclass method SimpleJsonapi::Node::Base::new
# File lib/simple_jsonapi/node/relationships.rb, line 18
def initialize(resource:, resource_type:, relationship_definitions:, **options)
  super(options)

  @resource = resource
  @resource_type = resource_type
  @relationship_definitions = relationship_definitions

  @relationship_nodes = relationship_definitions_to_render.map do |_name, defn|
    build_child_node(
      SimpleJsonapi::Node::Relationship,
      resource: resource,
      relationship_definition: defn,
    )
  end
end

Public Instance Methods

as_jsonapi() click to toggle source

@return [Hash{Symbol => Hash}]

# File lib/simple_jsonapi/node/relationships.rb, line 35
def as_jsonapi
  if @relationship_nodes.any?
    json = {}
    @relationship_nodes.each do |rel_node|
      json[rel_node.relationship_name] = rel_node.as_jsonapi
    end
    { relationships: json }
  else
    {}
  end
end

Private Instance Methods

relationship_definitions_to_render() click to toggle source
# File lib/simple_jsonapi/node/relationships.rb, line 49
def relationship_definitions_to_render
  @relationship_definitions_to_render ||= begin
    include_all_fields = fields_spec.all_fields?(resource_type)
    explicit_fields = fields_spec[resource_type]

    relationship_definitions
      .select { |name, _| include_all_fields || explicit_fields.include?(name) }
      .select { |_, defn| render?(defn, resource) }
  end
end