X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=lib%2Fmanifest%2Flist.rb;h=43d0c43c47c5f341792a99f7f5df7209b4848b23;hb=c7a2f802d50eb9ce97def7dafe6d28e18f52aa4f;hp=ec08314e8c69a8c05d1a976aee4a2d9a62501953;hpb=f29ea4296e5405338f24849841bd4eb38503a7e1;p=pettanr%2Fpettanr.git diff --git a/lib/manifest/list.rb b/lib/manifest/list.rb index ec08314e..43d0c43c 100644 --- a/lib/manifest/list.rb +++ b/lib/manifest/list.rb @@ -1,6 +1,49 @@ 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 @@ -44,6 +87,19 @@ module Pettanr 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 @@ -137,7 +193,7 @@ module Pettanr @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 @@ -250,7 +306,7 @@ module Pettanr 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