Class: ROM::Associations::Definitions::Abstract

Inherits:
Object
  • Object
show all
Extended by:
Dry::Core::ClassAttributes
Defined in:
core/lib/rom/associations/definitions/abstract.rb

Overview

Abstract association definition object

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#aliasSymbol (readonly)

Returns An optional association alias.

Returns:

  • (Symbol)

    An optional association alias



46
# File 'core/lib/rom/associations/definitions/abstract.rb', line 46

option :as, Types::Strict::Symbol.optional, optional: true

#combine_keysHash<Symbol=>Symbol> (readonly)

Returns Override inferred combine keys.

Returns:

  • (Hash<Symbol=>Symbol>)

    Override inferred combine keys



62
# File 'core/lib/rom/associations/definitions/abstract.rb', line 62

option :combine_keys, optional: true

#foreign_keySymbol (readonly)

Returns an optional association alias name.

Returns:

  • (Symbol)

    an optional association alias name



50
# File 'core/lib/rom/associations/definitions/abstract.rb', line 50

option :foreign_key, Types::Optional::Strict::Symbol, optional: true

#nameSymbol (readonly)

Returns The name of an association.

Returns:

  • (Symbol)

    The name of an association



42
# File 'core/lib/rom/associations/definitions/abstract.rb', line 42

option :name, Types::Strict::Symbol, default: -> { target.to_sym }

#overrideTrueClass, FalseClass (readonly)

Returns Whether custom view should override default one or not.

Returns:

  • (TrueClass, FalseClass)

    Whether custom view should override default one or not



58
# File 'core/lib/rom/associations/definitions/abstract.rb', line 58

option :override, optional: true, default: -> { false }

#relationSymbol (readonly)

Returns an optional relation identifier for the target.

Returns:

  • (Symbol)

    an optional relation identifier for the target



34
# File 'core/lib/rom/associations/definitions/abstract.rb', line 34

option :relation, Types::Strict::Symbol, optional: true

#resultSymbol (readonly)

Returns either :one or :many.

Returns:

  • (Symbol)

    either :one or :many



38
# File 'core/lib/rom/associations/definitions/abstract.rb', line 38

option :result, Types::Strict::Symbol, default: -> { self.class.result }

#sourceRelation::Name (readonly)

Returns the source relation name.

Returns:

  • (Relation::Name)

    the source relation name



26
# File 'core/lib/rom/associations/definitions/abstract.rb', line 26

param :source

#targetRelation::Name (readonly)

Returns the target relation name.

Returns:

  • (Relation::Name)

    the target relation name



30
# File 'core/lib/rom/associations/definitions/abstract.rb', line 30

param :target

#viewSymbol (readonly)

Returns An optional view that should be used to extend assoc relation.

Returns:

  • (Symbol)

    An optional view that should be used to extend assoc relation



54
# File 'core/lib/rom/associations/definitions/abstract.rb', line 54

option :view, optional: true

Class Method Details

.new(source, target, **opts) ⇒ Object

Instantiate a new association definition

Parameters:

  • source (Symbol)

    The name of the source dataset

  • target (Symbol)

    The name of the target dataset

  • opts (Hash)

    The option hash

Options Hash (**opts):

  • :as (Symbol)

    The name of the association (defaults to target)

  • :relation (Symbol)

    The name of the target relation (defaults to target)

  • :foreign_key (Symbol)

    The name of a custom foreign key

  • :view (Symbol)

    The name of a custom relation view on the target's relation side

  • :override (TrueClass, FalseClass)

    Whether provided :view should override association's default view



76
77
78
79
80
81
82
# File 'core/lib/rom/associations/definitions/abstract.rb', line 76

def self.new(source, target, **opts)
  source_name = Relation::Name[source]
  target_name = resolve_target_name(target, opts)
  options = process_options(target_name, Hash[opts])

  super(source_name, target_name, **options)
end

Instance Method Details

#aliased?Boolean

Return true if association is aliased

Returns:

  • (Boolean)


119
120
121
# File 'core/lib/rom/associations/definitions/abstract.rb', line 119

def aliased?
  options.key?(:as)
end

#override?Boolean

Return true if association's default relation view should be overridden by a custom one

Returns:

  • (Boolean)


110
111
112
# File 'core/lib/rom/associations/definitions/abstract.rb', line 110

def override?
  options[:override].equal?(true)
end

#typeClass

Return association class for a given definition object

Returns:

  • (Class)


128
129
130
# File 'core/lib/rom/associations/definitions/abstract.rb', line 128

def type
  Inflector.demodulize(self.class.name).to_sym
end