Class: Dige::Associations

Inherits:
Object
  • Object
show all
Includes:
List
Defined in:
lib/dige/associations.rb

Instance Method Summary collapse

Methods included from List

included

Instance Method Details

#all(type = :normal) ⇒ Object



35
36
37
# File 'lib/dige/associations.rb', line 35

def all(type = :normal)
  list.select { |list_item| type == :all || list_item.type == type }
end

#register(from_class_name, from_table_name, to_class_name, to_table_name, type, assoc_macro, table_name) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/dige/associations.rb', line 4

def register(from_class_name, from_table_name, to_class_name, to_table_name, type, assoc_macro, table_name)
  # assoc_macro can be : :has_many, :belongs_to, :has_one
  
  tail_class_name = [ :belongs_to ].include?(assoc_macro) ? from_class_name : to_class_name
  tail_table_name = [ :belongs_to ].include?(assoc_macro) ? from_table_name : to_table_name
  head_class_name = [ :belongs_to ].include?(assoc_macro) ? to_class_name : from_class_name
  head_table_name = [ :belongs_to ].include?(assoc_macro) ? to_table_name : from_table_name
  
  objekt = Dige::Association.new({
    :from_class_name => tail_class_name,
    :from_table_name => tail_table_name,
    :to_class_name => head_class_name,
    :to_table_name => head_table_name,
    :type => type,
    :table_name => table_name
  })
  objekt.macro = assoc_macro if type == :polymorphic
  unless return_objekt = find(objekt)
    list << objekt
    return_objekt = objekt
  end
  if assoc_macro == :has_many || assoc_macro == :has_and_belongs_to_many
    return_objekt.from_arity = '0..*'
  elsif assoc_macro == :has_one
    return_objekt.from_arity = '1'
  elsif assoc_macro == :belongs_to
    return_objekt.to_arity = '1'
  end 
  return_objekt
end