OSDN Git Service

add peta model_manifest
[pettanr/pettanr.git] / lib / manifest / model.rb
index db6dd75..8392b19 100644 (file)
@@ -2,6 +2,7 @@ require_dependency "manifest/model/attribute"
 require_dependency "manifest/model/association"
 require_dependency "manifest/model/list"
 require_dependency "manifest/model/tree"
+require_dependency "manifest/model/peta"
 
 module Manifest
   class Model
@@ -15,7 +16,7 @@ module Manifest
     end
     
     attr :model_name, :model_manifest, 
-      :attributes, :associations, :tree, :lists, :extend_column_name
+      :attributes, :associations, :tree, :lists, :peta, :extend_column_name
     def initialize manifest, model_name, model_manifest
       @manifest = manifest
       @model_name = model_name
@@ -30,6 +31,7 @@ module Manifest
       @model_manifest['tree'] ||= {}
       @model_manifest['lists'] ||= {}
       @model_manifest['extend_column_name'] ||= 'classname'
+      @model_manifest['peta'] ||= {}
       @model_manifest['attributes']['id'] = {
         'type' => 'number',
         'primary_key' => 1,
@@ -55,6 +57,7 @@ module Manifest
       @model_manifest['tree'].each {|tree_name, parent_model_name|
         @tree[tree_name] = ModelModule::Tree.new(self, tree_name, parent_model_name)
       }
+      @peta = ModelModule::PetaFactory.factory(self, @model_manifest['peta'])
       @extend_column_name = @model_manifest['extend_column_name']
       @lists = {}
       @model_manifest['lists'].each {|list_name, list_manifest|
@@ -90,29 +93,30 @@ module Manifest
       false
     end
     
-    def each_child_model_manifest tree_name
+    def child_model_manifests tree_name
+      r = []
       ::Manifest.manifest.models.each {|child_model_name, child_model_manifest|
         next unless child_model_manifest.tree[tree_name]
         next unless child_model_manifest.tree[tree_name].parent_model_name == @model_name
-        yield child_model_manifest
+        r << child_model_manifest
       }
+      r
     end
     
     def child_models tree_name
-      r = []
-      self.each_child_model_manifest(tree_name) {|child_model_manifest|
-        r << child_model_manifest.classify
+      self.child_model_manifests(tree_name).map {|child_model_manifest|
+        child_model_manifest.classify
       }
-      r
     end
     
     def child_element_names tree_name
-      r = []
-      self.each_child_model_manifest(tree_name) {|child_model_manifest|
-        # has_one ?
-        r << self.associations.child_element_name(child_model_manifest)
+      self.child_models(tree_name).map {|child_model|
+        self.associations.child_element_name(child_model)
       }
-      r
+    end
+    
+    def child_element_name item_name
+      self.associations.child_element_name(child_model_manifest)
     end
     
   end