Class: ROM::Associations::Abstract

Inherits:
Object
  • Object
show all
Defined in:
core/lib/rom/associations/abstract.rb

Overview

Abstract association class

Direct Known Subclasses

ManyToMany, ManyToOne, OneToMany

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#definitionROM::Associations::Definition (readonly)

Returns Association configuration object.

Returns:

  • (ROM::Associations::Definition)

    Association configuration object



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

param :definition

#relationsROM::RelationRegistry (readonly)

Returns Relation registry.

Returns:

  • (ROM::RelationRegistry)

    Relation registry



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

option :relations, reader: true

#sourceROM::SQL::Relation (readonly)

Returns the source relation.

Returns:

  • (ROM::SQL::Relation)

    the source relation



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

option :source, reader: true

#targetROM::SQL::Relation::Name (readonly)

Returns the target relation.

Returns:

  • (ROM::SQL::Relation::Name)

    the target relation



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

option :target, reader: true

Class Method Details

.new(definition, relations) ⇒ Object

Create an association object

Parameters:

  • definition (Definition)

    The association definition object

  • relations (RelationRegistry)

    The relation registry



43
44
45
46
47
48
49
50
# File 'core/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

Returns:

  • (Boolean)


57
58
59
# File 'core/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

Returns:



132
133
134
135
# File 'core/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

#asSymbol

Return association alias

Returns:

  • (Symbol)


66
67
68
# File 'core/lib/rom/associations/abstract.rb', line 66

def as
  definition.as
end

#combine_keysHash<Symbol=>Symbol>

Return combine keys hash

Combine keys are used for merging associated data together, typically these are the same as fk<=>pk mapping

Returns:

  • (Hash<Symbol=>Symbol>)


145
146
147
# File 'core/lib/rom/associations/abstract.rb', line 145

def combine_keys
  definition.combine_keys || { source_key => target_key }
end

#foreign_keySymbol

Return association foreign key name

Returns:

  • (Symbol)


94
95
96
# File 'core/lib/rom/associations/abstract.rb', line 94

def foreign_key
  definition.foreign_key
end

#keySymbol

Return the name of a key in tuples under which loaded association data are returned

Returns:

  • (Symbol)


123
124
125
# File 'core/lib/rom/associations/abstract.rb', line 123

def key
  as || name
end

#nameSymbol

Return association canonical name

Returns:

  • (Symbol)


75
76
77
# File 'core/lib/rom/associations/abstract.rb', line 75

def name
  definition.name
end

#override?Boolean

Return if a custom view should override default association view

Returns:

  • (Boolean)


114
115
116
# File 'core/lib/rom/associations/abstract.rb', line 114

def override?
  definition.override
end

#resultSymbol

Return result type

This can be either :one or :many

Returns:

  • (Symbol)


105
106
107
# File 'core/lib/rom/associations/abstract.rb', line 105

def result
  definition.result
end

#viewSymbol

Return the name of a custom relation view that should be use to extend or override default association view

Returns:

  • (Symbol)


85
86
87
# File 'core/lib/rom/associations/abstract.rb', line 85

def view
  definition.view
end