+ class BaseList
+ def initialize page, page_size, operators, item_name, list_name, conf, manifest
+ @operators = operators
+ @item_name = item_name
+ @list_name = list_name
+ @conf = conf
+ @manifest = manifest
+ @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
+
+ @model = @item_name.classify.constantize
+ @offset = (@page -1) * @page_size
+ end
+
+ def page_number prm = nil
+ page = prm.to_i
+ page = 1 if page < 1
+ page
+ end
+
+ def page_size prm
+ page_size = prm.to_i
+ page_size = @max_page_size if page_size > @max_page_size
+ page_size = @default_page_size if page_size < 1
+ page_size
+ end
+
+ def where
+ @model.list_where
+ end
+
+ def items
+ @model.where(self.where()).includes(@model.list_opt).order(@model.list_order).offset(@offset).limit(@page_size)
+ end
+
+ def paginate
+ Kaminari.paginate_array(Array.new(@model.where(self.where()).includes(@model.list_opt).count, nil)).page(@offset).per(@page_size)
+ end
+
+ end
+