OSDN Git Service

change page status
[pettanr/pettanr.git] / lib / locmare / list_group / list / base.rb
index 7c900a0..e899fd4 100644 (file)
@@ -1,26 +1,10 @@
 module Locmare
   module ListGroupModule
     class Base
-      class ListResult
-        attr :list, :items, :count, :paginate
-        
-        def initialize list, items, count, paginate, operators
-          @list = list
-          @items = items
-          @count = count  # total count
-          @paginate = paginate
-          @operators = operators
-        end
-        
-        def path
-          @list.action_manifest.url @list.options
-        end
-        
-      end
-      
       attr :list_group_name, :list_name, :options, :item_name, 
         :controller_manifest, :action_manifest, :list_manifest, :model,
-        :count
+        :page_status
+      
       def initialize list_group_name, list_name, operators, options = {}
         @list_group_name = list_group_name
         @list_name = list_name
@@ -43,73 +27,20 @@ module Locmare
       end
       
       def init
-        self.set_count
-        self.set_offset
-        self.set_limit
+        @page_status = LibModule::PageStatus.load self, self.total, @options
+        self.boost items
       end
       
       def model_name
         @model.model_name
       end
       
-      def set_offset
-        if prm = @options['offset'] || @options[:offset]
-          @offset = prm.to_i
-          @offset = @count - 1 if @offset >= @count
-          @offset = @count - @offset.abs if @offset < 0
-          @offset = 0 if @offset < 0
-          offset
-        else
-          @offset = (self.fixed_page - 1) * self.fixed_page_size
-        end
-        @offset
-      end
-      
-      def limit?
+      def limited?
         self.max_page_size > 0
       end
       
-      def unlimit?
-        !limit?
-      end
-      
-      def fixed_page
-        page = self.opt_page.to_i
-        page = 1 if page < 1
-        page
-      end
-      
-      def fixed_page_size
-        page_size = self.opt_page_size || self.default_page_size
-        page_size = self.max_page_size if self.limit? and (page_size > self.max_page_size)
-        page_size
-      end
-      
-      def set_limit
-        prm = self.opt_page_size || self.opt_count
-        @limit = prm.to_i
-        if self.max_page_size > 0
-          @limit = self.max_page_size if @limit > self.max_page_size
-        else  # unlimited api
-          @limit = @count if @limit > @count
-        end
-        @limit = self.default_page_size if @limit < 1
-        @limit
-      end
-      
-      def opt_page
-        n = @options['page'] || @options[:page]
-        n ? n.to_i : nil
-      end
-      
-      def opt_page_size
-        n = @options['page_size'] || @options[:page_size]
-        n ? n.to_i : nil
-      end
-      
-      def opt_count
-        n = @options['count'] || @options[:count]
-        n ? n.to_i : nil
+      def unlimited?
+        !self.limited?
       end
       
       def default_page_size
@@ -161,26 +92,22 @@ module Locmare
       end
       
       def items
-        @model.where(
+        @items ||= @model.where(
           self.where_condition
         ).includes(
           self.include_hash
         ).order(
           self.order_by
-        ).offset(@offset).limit(@limit)
+        ).offset(@page_status.offset).limit(@page_status.limit)
       end
       
-      def set_count
-        @count = @model.where(
+      def total
+        @model.where(
           self.where_condition
         ).includes(
           self.include_hash
         ).count
-      end
-      
-      def paginate count
-        c = count ? count.to_i : 0
-        Kaminari.paginate_array(Array.new(c, nil)).page(self.fixed_page).per(self.fixed_page_size)
+        # return string : =>"25"
       end
       
       def boost_manifests
@@ -198,17 +125,6 @@ module Locmare
         end
       end
       
-      def open operators
-        items = self.items
-        pg = if limit?
-          self.paginate @count
-        else
-          nil
-        end
-        self.boost items
-        ListResult.new self, items, @count, pg, @operators
-      end
-      
     end
     
   end