5 attr :list_group, :list_name, :list_manifest
7 def initialize list_group, list_name, list_manifest
8 @list_group = list_group
10 @list_manifest = list_manifest
17 @default_page_size = @conf['default_page_size'] || 25
18 @max_page_size = @conf['max_page_size'] || 100
19 @params_offset = params_offset
20 @params_count = params_count
21 @list_list_conf = @manifest.list(@item_name).lists[list_name] || {}
22 @model_name = @list_list_conf['model']
23 @filter_key = @list_list_conf['filter_key']
24 @model = @model_name.classify.constantize
25 @table_name = @model.table_name
27 @owner_model = @model.owner_model
28 @owner_table_name = @owner_model.table_name if @owner_model
35 def offset cnt, prm = nil
37 offset = cnt - 1 if offset >= cnt
38 offset = cnt - offset.abs if offset < 0
39 offset = 0 if offset < 0
44 prm ||= @default_page_size
46 count = @max_page_size if count > @max_page_size
47 count = @default_page_size if count < 1
52 @count ||= @model.count(:conditions => self.where(filter_item), :include => self.includes).to_i
57 w += ' and ' unless w.blank?
58 [w + @table_name + '.' + @filter_key + ' = ?', filter_item.id]
62 {@owner_model.item_name => {}}
70 c = @count || self.count(filter_item)
71 o = self.offset c, @offset
73 @model.where(self.where(filter_item)).includes(self.includes).order(self.order).offset(o).limit(l)
76 def prev_offset filter_item
77 c = @count || self.count(filter_item)
78 o = self.offset c, @offset
91 def next_offset filter_item
92 c = @count || self.count(filter_item)
93 o = self.offset c, @offset
102 def self.add_action item_name, action_name, list_name, list_conf