OSDN Git Service

Merge branch 'v06' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v06
[pettanr/pettanr.git] / lib / manifest / list.rb
index ec08314..43d0c43 100644 (file)
@@ -1,6 +1,49 @@
 
 module Pettanr
   class ListManager
+    class BaseList
+      def initialize page, page_size, operators, item_name, list_name, conf, manifest
+        @operators = operators
+        @item_name = item_name
+        @list_name = list_name
+        @conf = conf
+        @manifest = manifest
+        @default_page_size = @conf['default_page_size'] || 25
+        @max_page_size = @conf['max_page_size'] || 100
+        @page = self.page_number(page) 
+        @page_size = self.page_size page_size
+        
+        @model = @item_name.classify.constantize
+        @offset = (@page -1) * @page_size
+      end
+      
+      def page_number prm = nil
+        page = prm.to_i
+        page = 1 if page < 1
+        page
+      end
+      
+      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
+      end
+      
+      def where
+        @model.list_where
+      end
+      
+      def items
+        @model.where(self.where()).includes(@model.list_opt).order(@model.list_order).offset(@offset).limit(@page_size)
+      end
+      
+      def paginate
+        Kaminari.paginate_array(Array.new(@model.where(self.where()).includes(@model.list_opt).count, nil)).page(@offset).per(@page_size)
+      end
+      
+    end
+    
     class PublicList
       def initialize page, page_size, operators, item_name, list_name, conf, manifest
         @operators = operators
@@ -44,6 +87,19 @@ module Pettanr
       
     end
     
+    class SystemResourceList
+      def items
+        @model.where(self.where()).includes(@model.list_opt).order(@model.list_order).offset(@offset).limit(@page_size).delete_if {|sbt|
+          Pettanr::Application.manifest.system_resources.speech_balloon_templates[sbt.classname] == nil
+        }
+      end
+      
+      def paginate
+        Kaminari.paginate_array(Array.new(@model.where(self.where()).includes(@model.list_opt).count, nil)).page(@offset).per(@page_size)
+      end
+      
+    end
+    
     class PrivateList
       def initialize page, page_size, operators, item_name, list_name, conf, manifest
         @operators = operators
@@ -137,7 +193,7 @@ module Pettanr
         @model.where(self.where(parent_item)).includes(@model.list_opt).order(@model.list_order).offset(@offset).limit(@page_size)
       end
       
-      def paginate
+      def paginate parent_item
         Kaminari.paginate_array(Array.new(@model.where(self.where(parent_item)).includes(@model.list_opt).count, nil)).page(@offset).per(@page_size)
       end
       
@@ -250,7 +306,7 @@ module Pettanr
       
     end
     
-    @@types = {'public' => PublicList, 'private' => PrivateList, 'has_many' => HasManyList, 'filter' => FilterList, 'through_filter' => ThroughFilterList}
+    @@types = {'public' => PublicList, 'system_resource' => SystemResourceList, 'private' => PrivateList, 'has_many' => HasManyList, 'filter' => FilterList, 'through_filter' => ThroughFilterList}
     def initialize list_manifest
       @list_manifest = list_manifest
       @item_name = @list_manifest.item_name