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
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
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
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