1 require_dependency "manifest/list_group/list/where"
2 require_dependency "manifest/list_group/list/includes"
9 def initialize items, paginate
16 attr :list_group, :list_name, :list_manifest,
17 :model, :model_manifest, :model_list_manifest,
19 def initialize list_group, list_name, list_manifest
20 @list_group = list_group
21 @list_name = list_name
22 @list_manifest = list_manifest
28 @model_manifest = ::Manifest.manifest.models[self.item_name]
29 @model_list_manifest = @model_manifest.lists[@list_name]
30 @list_manifest['where'] ||= {}
31 @list_manifest['includes'] ||= {}
35 @model = ::Manifest.item_name_to_model self.item_name
36 @table_name = @model.table_name
37 @where = WhereFactory.factory self, @list_manifest['where']
38 @includes = IncludeFactory.factory self, @list_manifest['includes']
46 @model_list_manifest.default_page_size
50 @model_list_manifest.max_page_size
53 def page_number prm = nil
61 page_size = self.max_page_size if page_size > self.max_page_size
62 page_size = self.default_page_size if page_size < 1
66 def base_where_condition
67 method_name = @where.conditions do |name|
70 @model.__send__ method_name
85 def items operators, options, offset, page_size
86 @model.where(self.where_condition).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
89 def count operators, options
90 @model.where(self.where_condition).includes(self.include_hash).count
93 def paginate count, offset, page_size
94 c = count ? count.to_i : 0
95 Kaminari.paginate_array(Array.new(c, nil)).page(offset).per(page_size)
98 def open operators, options
99 page = self.page_number(options[:page])
100 page_size = self.page_size options[:page_size]
101 offset = (page -1) * page_size
102 items = self.items operators, options, offset, page_size
103 count = self.count operators, options
104 pg = self.paginate count, offset, page_size
105 ListResult.new items, pg