Class: ROM::Associations::Definitions::Abstract
- Inherits:
-
Object
- Object
- ROM::Associations::Definitions::Abstract
- Extended by:
- Dry::Core::ClassAttributes, Initializer
- Defined in:
- core/lib/rom/associations/definitions/abstract.rb
Overview
Abstract association definition object
Direct Known Subclasses
Instance Attribute Summary collapse
-
#alias ⇒ Symbol
readonly
An optional association alias.
-
#combine_keys ⇒ Hash<Symbol=>Symbol>
readonly
Override inferred combine keys.
-
#foreign_key ⇒ Symbol
readonly
An optional association alias name.
-
#name ⇒ Symbol
readonly
The name of an association.
-
#override ⇒ TrueClass, FalseClass
readonly
Whether custom view should override default one or not.
-
#relation ⇒ Symbol
readonly
An optional relation identifier for the target.
-
#result ⇒ Symbol
readonly
Either :one or :many.
-
#source ⇒ Relation::Name
readonly
The source relation name.
-
#target ⇒ Relation::Name
readonly
The target relation name.
-
#view ⇒ Symbol
readonly
An optional view that should be used to extend assoc relation.
Class Method Summary collapse
-
.new(source, target, **opts) ⇒ Object
Instantiate a new association definition.
- .process_options(target, options) ⇒ Object private
- .resolve_target_name(target, options) ⇒ Object private
Instance Method Summary collapse
-
#aliased? ⇒ Boolean
Return true if association is aliased.
-
#override? ⇒ Boolean
Return true if association's default relation view should be overridden by a custom one.
-
#type ⇒ Class
Return association class for a given definition object.
Instance Attribute Details
#alias ⇒ Symbol (readonly)
Returns An optional association alias.
44 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 44 option :as, Types::Strict::Symbol.optional, optional: true |
#combine_keys ⇒ Hash<Symbol=>Symbol> (readonly)
Returns Override inferred combine keys.
60 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 60 option :combine_keys, optional: true |
#foreign_key ⇒ Symbol (readonly)
Returns an optional association alias name.
48 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 48 option :foreign_key, Types::Optional::Strict::Symbol, optional: true |
#name ⇒ Symbol (readonly)
Returns The name of an association.
40 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 40 option :name, Types::Strict::Symbol, default: -> { target.to_sym } |
#override ⇒ TrueClass, FalseClass (readonly)
Returns Whether custom view should override default one or not.
56 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 56 option :override, optional: true, default: -> { false } |
#relation ⇒ Symbol (readonly)
Returns an optional relation identifier for the target.
32 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 32 option :relation, Types::Strict::Symbol, optional: true |
#result ⇒ Symbol (readonly)
Returns either :one or :many.
36 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 36 option :result, Types::Strict::Symbol, default: -> { self.class.result } |
#source ⇒ Relation::Name (readonly)
Returns the source relation name.
24 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 24 param :source |
#target ⇒ Relation::Name (readonly)
Returns the target relation name.
28 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 28 param :target |
#view ⇒ Symbol (readonly)
Returns An optional view that should be used to extend assoc relation.
52 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 52 option :view, optional: true |
Class Method Details
.new(source, target, **opts) ⇒ Object
Instantiate a new association definition
74 75 76 77 78 79 80 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 74 def self.new(source, target, **opts) source_name = Relation::Name[source] target_name = resolve_target_name(target, opts) = (target_name, Hash[opts]) super(source_name, target_name, **) end |
.process_options(target, options) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
91 92 93 94 95 96 97 98 99 100 101 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 91 def self.(target, ) through = [:through] if through [:through] = ThroughIdentifier[through, target.relation, [:assoc]] end [:name] = target.relation end |
.resolve_target_name(target, options) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
83 84 85 86 87 88 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 83 def self.resolve_target_name(target, ) dataset = target relation = .fetch(:relation, target) Relation::Name[relation, dataset, [:as]] end |
Instance Method Details
#aliased? ⇒ Boolean
Return true if association is aliased
117 118 119 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 117 def aliased? .key?(:as) end |
#override? ⇒ Boolean
Return true if association's default relation view should be overridden by a custom one
108 109 110 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 108 def override? [:override].equal?(true) end |
#type ⇒ Class
Return association class for a given definition object
126 127 128 |
# File 'core/lib/rom/associations/definitions/abstract.rb', line 126 def type Inflector.demodulize(self.class.name).to_sym end |