OSDN Git Service

fix extend_column_name
[pettanr/pettanr.git] / lib / manifest / model.rb
index 0707195..cdeb2a5 100644 (file)
@@ -15,7 +15,7 @@ module Manifest
     end
     
     attr :model_name, :model_manifest, 
-      :attributes, :associations, :tree, :lists
+      :attributes, :associations, :tree, :lists, :extend_column_name
     def initialize manifest, model_name, model_manifest
       @manifest = manifest
       @model_name = model_name
@@ -29,6 +29,7 @@ module Manifest
       @model_manifest['associations'] ||= {}
       @model_manifest['tree'] ||= {}
       @model_manifest['lists'] ||= {}
+      @model_manifest['extend_column_name'] ||= 'classname'
       @model_manifest['attributes']['id'] = {
         'type' => 'number',
         'primary_key' => 1,
@@ -54,6 +55,7 @@ module Manifest
       @model_manifest['tree'].each {|tree_name, parent_model_name|
         @tree[tree_name] = ModelModule::Tree.new(self, tree_name, parent_model_name)
       }
+      @extend_column_name = @model_manifest['extend_column_name']
       @lists = {}
       @model_manifest['lists'].each {|list_name, list_manifest|
         @lists[list_name] = ModelModule::ListFactory.factory(self, list_name, list_manifest)
@@ -64,6 +66,10 @@ module Manifest
       ::Manifest.item_name_to_model @model_name
     end
     
+    def table_name
+      self.classify.table_name
+    end
+    
     def valid_encode_columns
       r = []
       @attributes.each {|attribute_name, attribute|
@@ -84,6 +90,31 @@ module Manifest
       false
     end
     
+    def each_child_model_manifest tree_name
+      ::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
+      }
+    end
+    
+    def child_models tree_name
+      r = []
+      self.each_child_model_manifest(tree_name) {|child_model_manifest|
+        r << 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.model_name)
+      }
+      r
+    end
+    
   end
 end