4 attr :model, :list_name, :list_manifest
6 def initialize model, list_name, list_manifest
9 @list_manifest = list_manifest
16 @default_page_size = @conf['default_page_size'] || 25
17 @max_page_size = @conf['max_page_size'] || 100
18 @params_offset = params_offset
19 @params_count = params_count
20 @list_list_conf = @manifest.list(@item_name).lists[list_name] || {}
21 @model_name = @list_list_conf['model']
22 @filter_key = @list_list_conf['filter_key']
23 @model = @model_name.classify.constantize
24 @table_name = @model.table_name
26 @owner_model = @model.owner_model
27 @owner_table_name = @owner_model.table_name if @owner_model
42 def offset cnt, prm = nil
44 offset = cnt - 1 if offset >= cnt
45 offset = cnt - offset.abs if offset < 0
46 offset = 0 if offset < 0
51 prm ||= @default_page_size
53 count = @max_page_size if count > @max_page_size
54 count = @default_page_size if count < 1
59 @count ||= @model.count(:conditions => self.where(filter_item), :include => self.includes).to_i
64 w += ' and ' unless w.blank?
65 [w + @table_name + '.' + @filter_key + ' = ?', filter_item.id]
69 {@owner_model.item_name => {}}
77 c = @count || self.count(filter_item)
78 o = self.offset c, @offset
80 @model.where(self.where(filter_item)).includes(self.includes).order(self.order).offset(o).limit(l)
83 def prev_offset filter_item
84 c = @count || self.count(filter_item)
85 o = self.offset c, @offset
98 def next_offset filter_item
99 c = @count || self.count(filter_item)
100 o = self.offset c, @offset
101 l = self.limit @count
109 def self.add_action item_name, action_name, list_name, list_conf