@item_name = item_name
@conf = conf
@manifest = manifest
- @page = self.page_number(page || @conf['default_page_size'])
+ @default_page_size = @conf['default_page_size'] || 25
+ @max_page_size = @conf['max_page_size'] || 100
+ @page = self.page_number(page)
@page_size = self.page_size page_size
@operators = operators
@offset = (@page -1) * @page_size
end
- def self.page_number prm = nil
+ def page_number prm = nil
page = prm.to_i
page = 1 if page < 1
page
end
- def self.page_size prm
+ def page_size prm
page_size = prm.to_i
- page_size = self.max_page_size if page_size > self.max_page_size
- page_size = self.default_page_size if page_size < 1
+ page_size = @max_page_size if page_size > @max_page_size
+ page_size = @default_page_size if page_size < 1
page_size
end
@foreign_key = @association_conf['foreign_key']
end
- def where
- [@model.list_where + 'comics.author_id = ?', me.id]
+ def where parent_item
+ w = @model.list_where
+ w += ' and ' unless w.blank?
+ [w + @association_model_name + '.' + @foreign_key + ' = ?', parent_item.id]
end
- def items item
- method_name = 'list_by_' + item.item_name
- @association_model.__send__ @method_name, item.id, @operators, @page, @page_size
+ def items parent_item
+ @model.where(self.where(parent_item)).includes(@model.list_opt).order(@model.list_order).offset(@offset).limit(@page_size)
end
def paginate
@manifest = @list_manifest.manifest
@list_conf = @list_manifest.conf
@lists = {}
- @list_conf.each {|list_name, conf|
+ @list_manifest.lists.each {|list_name, conf|
type = conf['type']
@lists[list_name] = @@types[type]
}