Class: ROM::Associations::ManyToMany
- Defined in:
- core/lib/rom/associations/many_to_many.rb
Overview
Abstract many-to-many association type
Direct Known Subclasses
Instance Attribute Summary collapse
- #__memoized__ ⇒ Object included from Memoizable readonly private
- #join_relation ⇒ Object readonly
Instance Method Summary collapse
-
#associate(children, parent) ⇒ Array<Hash>
private
Associate child tuples with the provided parent.
-
#call ⇒ Object
abstract
Adapters should implement this method.
-
#foreign_key ⇒ Symbol
Return configured or inferred FK name.
-
#initialize ⇒ ManyToMany
constructor
private
A new instance of ManyToMany.
-
#parent_combine_keys ⇒ Hash<Symbol=>Symbol>
private
Return parent's relation combine keys.
-
#through ⇒ Symbol
Return join-relation name.
Constructor Details
#initialize ⇒ ManyToMany
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.
Returns a new instance of ManyToMany.
17 18 19 20 |
# File 'core/lib/rom/associations/many_to_many.rb', line 17 def initialize(*) super @join_relation = relations[through] end |
Instance Attribute Details
#__memoized__ ⇒ Object (readonly) Originally defined in module Memoizable
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.
#join_relation ⇒ Object (readonly)
14 15 16 |
# File 'core/lib/rom/associations/many_to_many.rb', line 14 def join_relation @join_relation end |
Instance Method Details
#associate(children, parent) ⇒ Array<Hash>
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.
Associate child tuples with the provided parent
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'core/lib/rom/associations/many_to_many.rb', line 67 def associate(children, parent) ((spk, sfk), (tfk, tpk)) = join_key_map case parent when Array parent.map { |p| associate(children, p) }.flatten(1) else children.map { |tuple| { sfk => tuple.fetch(spk), tfk => parent.fetch(tpk) } } end end |
#call ⇒ Object
Adapters should implement this method
28 29 30 |
# File 'core/lib/rom/associations/many_to_many.rb', line 28 def call(*) raise NotImplementedError end |
#foreign_key ⇒ Symbol
Return configured or inferred FK name
37 38 39 |
# File 'core/lib/rom/associations/many_to_many.rb', line 37 def foreign_key definition.foreign_key || join_relation.foreign_key(source.name) end |
#parent_combine_keys ⇒ Hash<Symbol=>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 parent's relation combine keys
55 56 57 |
# File 'core/lib/rom/associations/many_to_many.rb', line 55 def parent_combine_keys target.associations[source.name].combine_keys.to_a.flatten(1) end |
#through ⇒ Symbol
Return join-relation name
46 47 48 |
# File 'core/lib/rom/associations/many_to_many.rb', line 46 def through definition.through end |