OSDN Git Service

fix anything
[pettanr/pettanr.git] / lib / locmare / list_group / list / base.rb
1 module Locmare
2   module ListGroupModule
3     class Base
4       class ListResult
5         attr :items, :paginate
6         def initialize items, paginate
7           @items = items
8           @paginate = paginate
9         end
10         
11       end
12       
13       attr :item_name, :list_name, 
14         :model_manifest, :model_list_manifest, :model, 
15         :default_page_size, :max_page_size
16       def initialize item_name, list_name
17         @item_name = item_name
18         @list_name = list_name
19         self.init
20       end
21       
22       def init
23         @list_group_manifest = LocalManifest.manifest.list_groups[@item_name]
24         @list_manifest = @list_group_manifest.lists[@list_name]
25         @where = @list_manifest.where
26         @includes = @list_manifest.includes
27         @model_manifest = ::Manifest.manifest.models[@item_name]
28         @model_list_manifest = @model_manifest.list
29         @model = ::Manifest.item_name_to_model @item_name
30         @table_name = @model.table_name
31       end
32       
33       def model_name
34         @model.model_name
35       end
36       
37       def model_manifest
38         @model.model_manifest
39       end
40       
41       def page_number prm = nil
42         page = prm.to_i
43         page = 1 if page < 1
44         page
45       end
46       
47       def page_size prm
48         page_size = prm.to_i
49         page_size = self.max_page_size if page_size > self.max_page_size
50         page_size = self.default_page_size if page_size < 1
51         page_size
52       end
53       
54       def default_page_size
55         @model_list_manifest.default_page_size
56       end
57       
58       def max_page_size
59         @model_list_manifest.max_page_size
60       end
61       
62       def base_where_condition
63         method_name = @where.conditions do |name|
64           name
65         end
66         p method_name
67         @model.__send__ method_name
68       end
69       
70       def where_condition
71         base_where_condition
72       end
73       
74       def include_hash
75         @includes.includes
76       end
77       
78       def order
79         @model.list_order
80       end
81       
82       def items operators, options, offset, page_size
83         @model.where(self.where_condition).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
84       end
85       
86       def count operators, options
87         @model.where(self.where_condition).includes(self.include_hash).count
88       end
89       
90       def paginate count, offset, page_size
91         c = count ? count.to_i : 0
92         Kaminari.paginate_array(Array.new(c, nil)).page(offset).per(page_size)
93       end
94       
95       def boost_manifests
96         @model.my_peta.boost.select do |boost_name, boost_manifest|
97           boost_manifest.level == 'show'
98         end
99       end
100       
101       def boost items
102         manifests = self.boost_manifests
103         items.each do |item|
104           manifests.each do |boost_manifest|
105             item.boost_manifest
106           end
107         end
108       end
109       
110       def open operators, options
111         page = self.page_number(options[:page]) 
112         page_size = self.page_size options[:page_size]
113         offset = (page -1) * page_size
114         items = self.items operators, options, offset, page_size
115         count = self.count operators, options
116         pg = self.paginate count, offset, page_size
117         self.boost items
118         ListResult.new items, pg
119       end
120       
121     end
122     
123   end
124 end