OSDN Git Service

fix orm
[pettanr/pettanr.git] / lib / manifest / list / base.rb
index 8516bd7..a771846 100644 (file)
@@ -1,3 +1,5 @@
+require_dependency "manifest/list/where"
+require_dependency "manifest/list/includes"
 module Manifest
   module ListModule
     class Base
@@ -11,7 +13,8 @@ module Manifest
       end
       
       attr :manifest, :item_name, :list_name, :list_manifest, 
-        :default_page_size, :max_page_size
+        :model, :model_manifest, :model_list_manifest, 
+        :where, :includes
       def initialize manifest, item_name, list_name, list_manifest
         @manifest = manifest
         @item_name = item_name
@@ -24,20 +27,23 @@ module Manifest
       def set_default
         @model_manifest = @manifest.models[@item_name]
         @model_list_manifest = @model_manifest.lists[@list_name]
-        @list_manifest['default_page_size'] ||= @model_list_manifest.default_page_size
-        @list_manifest['max_page_size'] ||= @model_list_manifest.max_page_size
+        @list_manifest['where'] ||= {}
+        @list_manifest['includes'] ||= {}
       end
       
       def init
-        @default_page_size = @list_manifest['default_page_size']
-        @max_page_size = @list_manifest['max_page_size']
-        
         @model = ::Manifest.item_name_to_model @item_name
         @table_name = @model.table_name
-        if @model.content?
-          @owner_model = @model.owner_model
-          @owner_table_name = @owner_model.table_name if @owner_model
-        end
+        @where = WhereFactory.factory self, @list_manifest['where']
+        @includes = IncludeFactory.factory self, @list_manifest['includes']
+      end
+      
+      def default_page_size
+        @model_list_manifest.default_page_size
+      end
+      
+      def max_page_size
+        @model_list_manifest.max_page_size
       end
       
       def page_number prm = nil
@@ -48,25 +54,24 @@ module Manifest
       
       def page_size prm
         page_size = prm.to_i
-        page_size = @max_page_size if page_size > @max_page_size
-        page_size = @default_page_size if page_size < 1
+        page_size = self.max_page_size if page_size > self.max_page_size
+        page_size = self.default_page_size if page_size < 1
         page_size
       end
       
-      def where
-        @model.list_where
+      def base_where_condition
+        method_name = @where.conditions do |name|
+          name
+        end
+        @model.__send__ method_name
       end
       
-      def includes
-        if @owner_model
-          if @owner_model.owner_model
-            {@owner_model.item_name => {@owner_model.owner_model.item_name => {}}}
-          else
-            {@owner_model.item_name => {}}
-          end
-        else
-          {}
-        end
+      def where_condition
+        base_where_condition
+      end
+      
+      def include_hash
+        @includes.includes
       end
       
       def order
@@ -74,11 +79,11 @@ module Manifest
       end
       
       def items operators, options, offset, page_size
-        @model.where(self.where).includes(self.includes).order(self.order).offset(offset).limit(page_size)
+        @model.where(self.where_condition).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
       end
       
       def count operators, options
-        @model.where(self.where).includes(self.includes).count
+        @model.where(self.where_condition).includes(self.include_hash).count
       end
       
       def paginate count, offset, page_size