5 attr :list, :items, :count, :paginate
7 def initialize list, items, count, paginate, operators
10 @count = count # total count
12 @operators = operators
16 @list.action_manifest.url @list.options
21 attr :list_group_name, :list_name, :options, :item_name,
22 :controller_manifest, :action_manifest, :list_manifest, :model,
24 def initialize list_group_name, list_name, operators, options = {}
25 @list_group_name = list_group_name
26 @list_name = list_name
27 @operators = operators
30 @list_group_manifest = LocalManifest.manifest.list_groups[@list_group_name]
31 @list_manifest = @list_group_manifest.lists[@list_name]
32 @where = @list_manifest.where
33 @includes = @list_manifest.includes
35 @controller_name = @list_group_name
36 @action_name = @list_name
37 @controller_manifest = ::Manifest.manifest.controllers[@controller_name]
38 @action_manifest = @controller_manifest.actions[@action_name]
39 @item_name = @action_manifest.item_name
40 @model = ::Manifest.item_name_to_model @item_name
41 @table_name = @model.table_name
56 if prm = @options['offset'] || @options[:offset]
58 @offset = @count - 1 if @offset >= @count
59 @offset = @count - @offset.abs if @offset < 0
60 @offset = 0 if @offset < 0
63 @offset = (self.fixed_page - 1) * self.fixed_page_size
69 self.max_page_size > 0
77 page = self.opt_page.to_i
83 page_size = self.opt_page_size || self.default_page_size
84 page_size = self.max_page_size if self.limit? and (page_size > self.max_page_size)
89 prm = self.opt_page_size || self.opt_count
91 if self.max_page_size > 0
92 @limit = self.max_page_size if @limit > self.max_page_size
94 @limit = @count if @limit > @count
96 @limit = self.default_page_size if @limit < 1
101 n = @options['page'] || @options[:page]
106 n = @options['page_size'] || @options[:page_size]
111 n = @options['count'] || @options[:count]
115 def default_page_size
116 @action_manifest.default_page_size
120 @action_manifest.max_page_size
124 order = @options['order'] || @options[:order] || @action_manifest.order
125 order = 'updated_at' unless ::Manifest.manifest.models[@item_name].attributes[order]
126 @table_name + '.' + order
130 direction = @options['direction'] || @options[:direction] || @action_manifest.direction
141 @options['id'] || @options[:id]
145 self.order + ' ' + self.direction
148 def base_where_condition
149 method_name = @where.conditions do |name|
152 @model.__send__ method_name
170 ).offset(@offset).limit(@limit)
174 @count = @model.where(
182 c = count ? count.to_i : 0
183 Kaminari.paginate_array(Array.new(c, nil)).page(self.fixed_page).per(self.fixed_page_size)
187 @model.my_peta.boost.select do |boost_name, boost_manifest|
188 boost_manifest.level == 'show'
193 manifests = self.boost_manifests
195 manifests.each do |boost_manifest|
196 item.boost_manifest # ?
209 ListResult.new self, items, @count, pg, @operators