Class: SimpleJsonapi::Definition::Relationship
- 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
- #cardinality ⇒ :singular, :collection readonly
- #data_definition ⇒ Proc readonly
- #description ⇒ String readonly
- #name ⇒ Symbol readonly
- #serializer_inferrer ⇒ SerializerInferrer readonly
Attributes included from Concerns::HasMetaObject
Attributes included from Concerns::HasLinksObject
Instance Method Summary collapse
- #collection? ⇒ Boolean
- #data(&block) ⇒ void
-
#initialize(name, cardinality:, description: nil, **options) {|resource| ... } ⇒ Relationship
constructor
A new instance of Relationship.
- #singular? ⇒ Boolean
Methods included from Concerns::HasMetaObject
Methods included from Concerns::HasLinksObject
Constructor Details
#initialize(name, cardinality:, description: nil, **options) {|resource| ... } ⇒ Relationship
Returns a new instance of Relationship.
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, **, &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([:serializer]) instance_eval(&block) if block_given? data { |resource| resource.public_send(name) } unless data_definition end |
Instance Attribute Details
#cardinality ⇒ :singular, :collection (readonly)
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, **, &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([: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_definition ⇒ Proc (readonly)
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, **, &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([: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 |
#description ⇒ String (readonly)
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, **, &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([: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 |
#name ⇒ Symbol (readonly)
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, **, &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([: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_inferrer ⇒ SerializerInferrer (readonly)
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, **, &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([: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
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
53 54 55 |
# File 'lib/simple_jsonapi/definition/relationship.rb', line 53 def singular? cardinality == :singular end |