class SimpleJsonapi::Definition::Relationship

Represents a single relationship on a resource

@!attribute [r] name

@return [Symbol]

@!attribute [r] cardinality

@return [:singular,:collection]

@!attribute [r] serializer_inferrer

@return [SerializerInferrer]

@!attribute [r] description

@return [String]

@!attribute [r] data_definition

@return [Proc]

Attributes

cardinality[R]
data_definition[R]
description[R]
name[R]
serializer_inferrer[R]

Public Class Methods

new(name, cardinality:, description: nil, **options, &block) click to toggle source

@param name [Symbol] @param cardinality [Symbol] :singular, :collection @param description [String] @yieldparam resource [Object] @yieldreturn [Object,Array<Object>] The related resource or resources @option (see Definition::Base#initialize)

# File lib/simple_jsonapi/definition/relationship.rb, line 25
def initialize(name, cardinality:, description: nil, **options, &block)
  super

  unless %i[singular collection].include?(cardinality)
    raise ArgumentError, "Cardinality must be :singular or :collection"
  end

  @name = name.to_sym
  @cardinality = cardinality.to_sym
  @description = description.to_s.presence
  @serializer_inferrer = SimpleJsonapi::SerializerInferrer.wrap(options[:serializer])

  instance_eval(&block) if block_given?

  data { |resource| resource.public_send(name) } unless data_definition
end

Public Instance Methods

collection?() click to toggle source
# File lib/simple_jsonapi/definition/relationship.rb, line 57
def collection?
  cardinality == :collection
end
data(&block) click to toggle source

@return [void]

# File lib/simple_jsonapi/definition/relationship.rb, line 49
def data(&block)
  @data_definition = block
end
singular?() click to toggle source
# File lib/simple_jsonapi/definition/relationship.rb, line 53
def singular?
  cardinality == :singular
end

Private Instance Methods

initialize_dup(new_def) click to toggle source
# File lib/simple_jsonapi/definition/relationship.rb, line 42
        def initialize_dup(new_def)
  super
  # name and cardinality are symbols, can't be duped
  # serializer_inferrer doesn't need to be duped?
end