Class: ROM::Associations::Abstract
- Inherits:
-
Object
- Object
- ROM::Associations::Abstract
- Extended by:
- Initializer
- Includes:
- Memoizable
- Defined in:
- lib/rom/associations/abstract.rb
Overview
Abstract association class
Direct Known Subclasses
Constant Summary
Constants included from Memoizable
Instance Attribute Summary collapse
-
#definition ⇒ ROM::Associations::Definition
readonly
Association configuration object.
-
#relations ⇒ ROM::RelationRegistry
readonly
Relation registry.
-
#source ⇒ ROM::SQL::Relation
readonly
The source relation.
-
#target ⇒ ROM::SQL::Relation::Name
readonly
The target relation.
Attributes included from Memoizable
Class Method Summary collapse
-
.new(definition, relations) ⇒ Object
Create an association object.
Instance Method Summary collapse
-
#aliased? ⇒ Boolean
Return if an association has an alias.
-
#apply_view(schema, relation) ⇒ Relation
Applies custom view to the default association view.
-
#as ⇒ Symbol
Return association alias.
-
#combine_keys ⇒ Hash<Symbol=>Symbol>
Return combine keys hash.
-
#foreign_key ⇒ Symbol
Return association foreign key name.
-
#join_key_map ⇒ Array<Symbol>
private
Return names of source PKs and target FKs.
-
#key ⇒ Symbol
Return the name of a key in tuples under which loaded association data are returned.
-
#name ⇒ Symbol
Return association canonical name.
-
#node ⇒ Relation
private
Return target relation configured as a combine node.
-
#override? ⇒ Boolean
Return if a custom view should override default association view.
-
#prepare(target) ⇒ Relation
private
Prepare association’s target relation for composition.
-
#result ⇒ Symbol
Return result type.
-
#self_ref? ⇒ Boolean
private
Return if this association’s source relation is the same as the target.
-
#view ⇒ Symbol
Return the name of a custom relation view that should be use to extend or override default association view.
-
#wrap ⇒ Relation
private
Return target relation as a wrap node.
Methods included from Initializer
Methods included from Memoizable
Instance Attribute Details
#definition ⇒ ROM::Associations::Definition (readonly)
Returns Association configuration object.
23 |
# File 'lib/rom/associations/abstract.rb', line 23 param :definition |
#relations ⇒ ROM::RelationRegistry (readonly)
Returns Relation registry.
27 |
# File 'lib/rom/associations/abstract.rb', line 27 option :relations, reader: true |
#source ⇒ ROM::SQL::Relation (readonly)
Returns the source relation.
31 |
# File 'lib/rom/associations/abstract.rb', line 31 option :source, reader: true |
#target ⇒ ROM::SQL::Relation::Name (readonly)
Returns the target relation.
35 |
# File 'lib/rom/associations/abstract.rb', line 35 option :target, reader: true |
Class Method Details
.new(definition, relations) ⇒ Object
Create an association object
43 44 45 46 47 48 49 50 |
# File 'lib/rom/associations/abstract.rb', line 43 def self.new(definition, relations) super( definition, relations: relations, source: relations[definition.source.relation], target: relations[definition.target.relation] ) end |
Instance Method Details
#aliased? ⇒ Boolean
Return if an association has an alias
57 58 59 |
# File 'lib/rom/associations/abstract.rb', line 57 def aliased? definition.aliased? end |
#apply_view(schema, relation) ⇒ Relation
Applies custom view to the default association view
132 133 134 135 |
# File 'lib/rom/associations/abstract.rb', line 132 def apply_view(schema, relation) view_rel = relation.public_send(view) schema.merge(view_rel.schema).uniq(&:key).(view_rel) end |
#as ⇒ Symbol
Return association alias
66 67 68 |
# File 'lib/rom/associations/abstract.rb', line 66 def as definition.as end |
#combine_keys ⇒ Hash<Symbol=>Symbol>
Return combine keys hash
Combine keys are used for merging associated data together, typically these are the same as fk<=>pk mapping
145 146 147 |
# File 'lib/rom/associations/abstract.rb', line 145 def combine_keys definition.combine_keys || { source_key => target_key } end |
#foreign_key ⇒ Symbol
Return association foreign key name
94 95 96 |
# File 'lib/rom/associations/abstract.rb', line 94 def foreign_key definition.foreign_key end |
#join_key_map ⇒ Array<Symbol>
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.
Return names of source PKs and target FKs
154 155 156 |
# File 'lib/rom/associations/abstract.rb', line 154 def join_key_map join_keys.to_a.flatten(1).map(&:key) end |
#key ⇒ Symbol
Return the name of a key in tuples under which loaded association data are returned
123 124 125 |
# File 'lib/rom/associations/abstract.rb', line 123 def key as || name end |
#name ⇒ Symbol
Return association canonical name
75 76 77 |
# File 'lib/rom/associations/abstract.rb', line 75 def name definition.name end |
#node ⇒ Relation
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.
Return target relation configured as a combine node
163 164 165 166 167 168 |
# File 'lib/rom/associations/abstract.rb', line 163 def node target.with( name: target.name.as(key), meta: { keys: combine_keys, combine_type: result, combine_name: key } ) end |
#override? ⇒ Boolean
Return if a custom view should override default association view
114 115 116 |
# File 'lib/rom/associations/abstract.rb', line 114 def override? definition.override end |
#prepare(target) ⇒ Relation
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.
Prepare association’s target relation for composition
188 189 190 191 192 193 194 |
# File 'lib/rom/associations/abstract.rb', line 188 def prepare(target) if override? target.public_send(view) else call(target: target) end end |
#result ⇒ Symbol
Return result type
This can be either :one or :many
105 106 107 |
# File 'lib/rom/associations/abstract.rb', line 105 def result definition.result end |
#self_ref? ⇒ Boolean
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.
Return if this association’s source relation is the same as the target
201 202 203 |
# File 'lib/rom/associations/abstract.rb', line 201 def self_ref? source.name.dataset == target.name.dataset end |
#view ⇒ Symbol
Return the name of a custom relation view that should be use to extend or override default association view
85 86 87 |
# File 'lib/rom/associations/abstract.rb', line 85 def view definition.view end |
#wrap ⇒ Relation
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.
Return target relation as a wrap node
175 176 177 178 179 180 181 |
# File 'lib/rom/associations/abstract.rb', line 175 def wrap target.with( name: target.name.as(key), schema: target.schema.wrap, meta: { wrap: true, combine_name: key } ) end |