Class: DynamicActiveModel::Associations

Inherits:
Object
  • Object
show all
Defined in:
lib/dynamic-active-model/associations.rb

Overview

DynamicActiveModel::Associations iterates over the models of a

database and adds has_many and belongs_to based on foreign keys

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(database) ⇒ Associations

Returns a new instance of Associations.



9
10
11
12
13
14
# File 'lib/dynamic-active-model/associations.rb', line 9

def initialize(database)
  @database = database
  @foreign_keys = database.models.each_with_object({}) do |model, hsh|
    hsh[model.table_name] = ForeignKey.new(model)
  end
end

Instance Attribute Details

#databaseObject (readonly)

Returns the value of attribute database.



7
8
9
# File 'lib/dynamic-active-model/associations.rb', line 7

def database
  @database
end

Instance Method Details

#add_foreign_key(table_name, foreign_key, relationship_name = nil) ⇒ Object



16
17
18
# File 'lib/dynamic-active-model/associations.rb', line 16

def add_foreign_key(table_name, foreign_key, relationship_name = nil)
  @foreign_keys[table_name].add(foreign_key, relationship_name)
end

#build!Object

iterates over the models and adds relationships



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/dynamic-active-model/associations.rb', line 21

def build!
  foreign_key_to_models = create_foreign_key_to_model_map

  @database.models.each do |model|
    model.column_names.each do |column_name|
      next unless foreign_key_to_models[column_name.downcase]

      foreign_key_to_models[column_name.downcase].each do |foreign_model, relationship_name|
        next if foreign_model == model

        add_relationships(relationship_name, model, foreign_model, column_name)
      end
    end
  end
end