Class: SimpleJsonapi::Definition::Relationship

Inherits:
Base
  • Object
show all
Includes:
Concerns::HasLinksObject, Concerns::HasMetaObject
Defined in:
lib/simple_jsonapi/definition/relationship.rb

Overview

Represents a single relationship on a resource

Instance Attribute Summary collapse

Attributes included from Concerns::HasMetaObject

#meta_definitions

Attributes included from Concerns::HasLinksObject

#link_definitions

Instance Method Summary collapse

Methods included from Concerns::HasMetaObject

#meta

Methods included from Concerns::HasLinksObject

#link

Constructor Details

#initialize(name, cardinality:, description: nil, **options) {|resource| ... } ⇒ Relationship

Returns a new instance of Relationship.

Parameters:

  • name (Symbol)
  • cardinality (Symbol)

    :singular, :collection

  • description (String) (defaults to: nil)
  • options (Hash)

    a customizable set of options

Options Hash (**options):

  • if (Proc<Boolean>)
  • unless (Proc<Boolean>)

Yield Parameters:

  • resource (Object)

Yield Returns:

  • (Object, Array<Object>)

    The related resource or resources



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 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

Instance Attribute Details

#cardinality:singular, :collection (readonly)

Returns:

  • (:singular, :collection)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/simple_jsonapi/definition/relationship.rb', line 13

class SimpleJsonapi::Definition::Relationship < SimpleJsonapi::Definition::Base
  include SimpleJsonapi::Definition::Concerns::HasLinksObject
  include SimpleJsonapi::Definition::Concerns::HasMetaObject

  attr_reader :name, :cardinality, :serializer_inferrer, :description, :data_definition

  # @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)
  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

  private def initialize_dup(new_def)
    super
    # name and cardinality are symbols, can't be duped
    # serializer_inferrer doesn't need to be duped?
  end

  # @return [void]
  def data(&block)
    @data_definition = block
  end

  def singular?
    cardinality == :singular
  end

  def collection?
    cardinality == :collection
  end
end

#data_definitionProc (readonly)

Returns:

  • (Proc)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/simple_jsonapi/definition/relationship.rb', line 13

class SimpleJsonapi::Definition::Relationship < SimpleJsonapi::Definition::Base
  include SimpleJsonapi::Definition::Concerns::HasLinksObject
  include SimpleJsonapi::Definition::Concerns::HasMetaObject

  attr_reader :name, :cardinality, :serializer_inferrer, :description, :data_definition

  # @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)
  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

  private def initialize_dup(new_def)
    super
    # name and cardinality are symbols, can't be duped
    # serializer_inferrer doesn't need to be duped?
  end

  # @return [void]
  def data(&block)
    @data_definition = block
  end

  def singular?
    cardinality == :singular
  end

  def collection?
    cardinality == :collection
  end
end

#descriptionString (readonly)

Returns:

  • (String)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/simple_jsonapi/definition/relationship.rb', line 13

class SimpleJsonapi::Definition::Relationship < SimpleJsonapi::Definition::Base
  include SimpleJsonapi::Definition::Concerns::HasLinksObject
  include SimpleJsonapi::Definition::Concerns::HasMetaObject

  attr_reader :name, :cardinality, :serializer_inferrer, :description, :data_definition

  # @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)
  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

  private def initialize_dup(new_def)
    super
    # name and cardinality are symbols, can't be duped
    # serializer_inferrer doesn't need to be duped?
  end

  # @return [void]
  def data(&block)
    @data_definition = block
  end

  def singular?
    cardinality == :singular
  end

  def collection?
    cardinality == :collection
  end
end

#nameSymbol (readonly)

Returns:

  • (Symbol)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/simple_jsonapi/definition/relationship.rb', line 13

class SimpleJsonapi::Definition::Relationship < SimpleJsonapi::Definition::Base
  include SimpleJsonapi::Definition::Concerns::HasLinksObject
  include SimpleJsonapi::Definition::Concerns::HasMetaObject

  attr_reader :name, :cardinality, :serializer_inferrer, :description, :data_definition

  # @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)
  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

  private def initialize_dup(new_def)
    super
    # name and cardinality are symbols, can't be duped
    # serializer_inferrer doesn't need to be duped?
  end

  # @return [void]
  def data(&block)
    @data_definition = block
  end

  def singular?
    cardinality == :singular
  end

  def collection?
    cardinality == :collection
  end
end

#serializer_inferrerSerializerInferrer (readonly)

Returns:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/simple_jsonapi/definition/relationship.rb', line 13

class SimpleJsonapi::Definition::Relationship < SimpleJsonapi::Definition::Base
  include SimpleJsonapi::Definition::Concerns::HasLinksObject
  include SimpleJsonapi::Definition::Concerns::HasMetaObject

  attr_reader :name, :cardinality, :serializer_inferrer, :description, :data_definition

  # @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)
  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

  private def initialize_dup(new_def)
    super
    # name and cardinality are symbols, can't be duped
    # serializer_inferrer doesn't need to be duped?
  end

  # @return [void]
  def data(&block)
    @data_definition = block
  end

  def singular?
    cardinality == :singular
  end

  def collection?
    cardinality == :collection
  end
end

Instance Method Details

#collection?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/simple_jsonapi/definition/relationship.rb', line 57

def collection?
  cardinality == :collection
end

#data(&block) ⇒ void

This method returns an undefined value.



49
50
51
# File 'lib/simple_jsonapi/definition/relationship.rb', line 49

def data(&block)
  @data_definition = block
end

#singular?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/simple_jsonapi/definition/relationship.rb', line 53

def singular?
  cardinality == :singular
end