OSDN Git Service

fix remove tree
[pettanr/pettanr.git] / lib / manifest / model / association.rb
index e81624b..b9e101c 100644 (file)
@@ -1,6 +1,6 @@
-require_dependency "manifest/model/association/belongs_to"
-require_dependency "manifest/model/association/has_many"
-require_dependency "manifest/model/association/has_one"
+ManifestBase.require_modules "manifest/model/association/", 
+  %w|belongs_to has_many has_one|
+
 module Manifest
   module ModelModule
     class Association < ManifestBase::Values
@@ -10,31 +10,36 @@ module Manifest
       
       def set_default
         super
-        @args['belongs_to'] ||= {}
-        @args['has_many'] ||= {}
-        @args['has_one'] ||= {}
+        @values['belongs_to'] ||= {}
+        @values['has_many'] ||= {}
+        @values['has_one'] ||= {}
       end
       
       def init
         super
-        @belongs_to = {}
-        @has_many = {}
-        @has_one = {}
-        @args['belongs_to'].each {|name, json|
-          @belongs_to[name] = BelongsTo.new(self, name, json)
-        }
-        @args['has_many'].each {|name, json|
-          @has_many[name] = HasMany.new(self, name, json)
-        }
-        @args['has_one'].each {|name, json|
-          @has_one[name] = HasOne.new(self, name, json)
-        }
+        @belongs_to = ManifestBase.load_name_values self, @values, 'belongs_to', BelongsTo
+        @has_many = ManifestBase.load_name_values self, @values, 'has_many', HasMany
+        @has_one = ManifestBase.load_name_values self, @values, 'has_one', HasOne
       end
       
       def model_name
         @parent.name
       end
       
+      def each_parent_model
+        @belongs_to.each do |name, belongs_to_manifest|
+          next unless @parent.classify.element?
+          if @parent.classify.my_peta.type == 'element'
+            next unless belongs_to_manifest.model.my_peta.type == 'root'
+          end
+          if @parent.classify.my_peta.type == 'leaf'
+            next unless belongs_to_manifest.model.my_peta.type == 'binder'
+          end
+ p  [@parent.classify  , belongs_to_manifest.model]
+          yield belongs_to_manifest.model
+        end
+      end
+      
       def child_element_name child_model
         if @has_one[child_model.item_name]
           child_model.item_name