Class: ROM::Associations::ManyToMany

Inherits:
Abstract
  • Object
show all
Defined in:
lib/rom/associations/many_to_many.rb

Overview

Abstract many-to-many association type

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeManyToMany

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 '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_relationObject (readonly)


14
15
16
# File '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

Parameters:

  • children (Array<Hash>)

    An array with child tuples

  • parent (Array, Hash)

    An array with parent tuples or a single tuple

Returns:

  • (Array<Hash>)

67
68
69
70
71
72
73
74
75
76
77
78
# File '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

#callObject

This method is abstract.

Adapters should implement this method

Raises:

  • (NotImplementedError)

28
29
30
# File 'lib/rom/associations/many_to_many.rb', line 28

def call(*)
  raise NotImplementedError
end

#foreign_keySymbol

Return configured or inferred FK name

Returns:

  • (Symbol)

37
38
39
# File 'lib/rom/associations/many_to_many.rb', line 37

def foreign_key
  definition.foreign_key || join_relation.foreign_key(source.name)
end

#parent_combine_keysHash<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

Returns:

  • (Hash<Symbol=>Symbol>)

55
56
57
# File 'lib/rom/associations/many_to_many.rb', line 55

def parent_combine_keys
  target.associations[source.name].combine_keys.to_a.flatten(1)
end

#throughSymbol

Return join-relation name

Returns:

  • (Symbol)

46
47
48
# File 'lib/rom/associations/many_to_many.rb', line 46

def through
  definition.through
end