OSDN Git Service

element
[pettanr/pettanr.git] / lib / manifest / model / association.rb
1 require_dependency "manifest/model/association/belongs_to"
2 require_dependency "manifest/model/association/has_many"
3 require_dependency "manifest/model/association/has_one"
4 module Manifest
5   module ModelModule
6     class Association
7       include AssociationModule
8       attr :model, :association_manifest, 
9         :belongs_to, :has_many, :has_one
10       def initialize model, association_manifest
11         @model = model
12         @association_manifest = association_manifest
13         self.set_default
14         self.init
15       end
16       
17       def set_default
18         @association_manifest['belongs_to'] ||= {}
19         @association_manifest['has_many'] ||= {}
20         @association_manifest['has_one'] ||= {}
21       end
22       
23       def init
24         @belongs_to = {}
25         @has_many = {}
26         @has_one = {}
27         @association_manifest['belongs_to'].each {|belongs_to_name, belongs_to_manifest|
28           @belongs_to[belongs_to_name] = BelongsTo.new(self, belongs_to_name, belongs_to_manifest)
29         }
30         @association_manifest['has_many'].each {|has_many_name, has_many_manifest|
31           @has_many[has_many_name] = HasMany.new(self, has_many_name, has_many_manifest)
32         }
33         @association_manifest['has_one'].each {|has_one_name, has_one_manifest|
34           @has_one[has_one_name] = HasOne.new(self, has_one_name, has_one_manifest)
35         }
36       end
37       
38       def model_name
39         @model.model_name
40       end
41       
42       def model_manifest
43         @model.model_manifest
44       end
45       
46       def child_element_name child_item_name
47         if @has_one[child_item_name]
48           child_model_manifest.model_name
49         else
50           child_model_manifest.table_name
51         end
52       end
53       
54     end
55     
56   end
57 end