6 def initialize items, paginate
13 attr :manifest, :item_name, :list_name, :list_manifest,
14 :default_page_size, :max_page_size
15 def initialize manifest, item_name, list_name, list_manifest
17 @item_name = item_name
18 @list_name = list_name
19 @list_manifest = list_manifest
25 @model_manifest = @manifest.models[@item_name]
26 @model_list_manifest = @model_manifest.lists[@list_name]
27 @list_manifest['default_page_size'] ||= @model_list_manifest.default_page_size
28 @list_manifest['max_page_size'] ||= @model_list_manifest.max_page_size
32 @default_page_size = @list_manifest['default_page_size']
33 @max_page_size = @list_manifest['max_page_size']
35 @model = ::Manifest.item_name_to_model @item_name
36 @table_name = @model.table_name
38 @owner_model = @model.owner_model
39 @owner_table_name = @owner_model.table_name if @owner_model
43 def page_number prm = nil
51 page_size = @max_page_size if page_size > @max_page_size
52 page_size = @default_page_size if page_size < 1
62 if @owner_model.owner_model
63 {@owner_model.item_name => {@owner_model.owner_model.item_name => {}}}
65 {@owner_model.item_name => {}}
76 def items operators, options, offset, page_size
77 @model.where(self.where).includes(self.includes).order(self.order).offset(offset).limit(page_size)
80 def count operators, options
81 @model.where(self.where).includes(self.includes)
84 def paginate items, offset, page_size
85 c = items ? items.count : 0
86 Kaminari.paginate_array(Array.new(c, nil)).page(offset).per(page_size)
89 def open operators, options
90 page = self.page_number(options[:page])
91 page_size = self.page_size options[:page_size]
92 offset = (page -1) * page_size
93 items = self.items operators, options, offset, page_size
94 paginate = self.paginate items, offset, page_size
95 ListResult.new items, paginate