module Pettanr
class ListManager
+ 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
+
class PublicList
def initialize page, page_size, operators, item_name, list_name, conf, manifest
@operators = operators
end
+ class SystemResourceList
+ def items
+ @model.where(self.where()).includes(@model.list_opt).order(@model.list_order).offset(@offset).limit(@page_size).delete_if {|sbt|
+ Pettanr::Application.manifest.system_resources.speech_balloon_templates[sbt.classname] == nil
+ }
+ 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
+
class PrivateList
def initialize page, page_size, operators, item_name, list_name, conf, manifest
@operators = operators
@model.where(self.where(parent_item)).includes(@model.list_opt).order(@model.list_order).offset(@offset).limit(@page_size)
end
- def paginate
+ def paginate parent_item
Kaminari.paginate_array(Array.new(@model.where(self.where(parent_item)).includes(@model.list_opt).count, nil)).page(@offset).per(@page_size)
end
end
- @@types = {'public' => PublicList, 'private' => PrivateList, 'has_many' => HasManyList, 'filter' => FilterList, 'through_filter' => ThroughFilterList}
+ @@types = {'public' => PublicList, 'system_resource' => SystemResourceList, 'private' => PrivateList, 'has_many' => HasManyList, 'filter' => FilterList, 'through_filter' => ThroughFilterList}
def initialize list_manifest
@list_manifest = list_manifest
@item_name = @list_manifest.item_name