OSDN Git Service

fix Manifest
[pettanr/pettanr.git] / lib / manifest / model / list / base.rb
1 module Manifest
2   module ListModule
3     class BaseList
4       attr :model, :list_name, :list_manifest, 
5         :default_page_size, :max_page_size
6       def initialize model, list_name, list_manifest
7         @model = model
8         @list_name = list_name
9         @list_manifest = list_manifest
10         self.set_default
11         self.init
12         
13         @model = ::Manifest.item_name_to_model self.model_name
14         @table_name = @model.table_name
15         if @model.content?
16           @owner_model = @model.owner_model
17           @owner_table_name = @owner_model.table_name if @owner_model
18         end
19       end
20       
21       def set_default
22         self.list_manifest['args'] ||= {}
23         @list_manifest['args']['default_page_size'] ||= 25
24         @list_manifest['args']['max_page_size'] ||= 100
25       end
26       
27       def init
28         @args = @list_manifest['args']
29         @default_page_size = @list_manifest['args']['default_page_size']
30         @max_page_size = @list_manifest['args']['max_page_size']
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 = @max_page_size if page_size > @max_page_size
50         page_size = @default_page_size if page_size < 1
51         page_size
52       end
53       
54       def where
55         @model.list_where
56       end
57       
58       def includes
59         if @owner_model
60           if @owner_model.owner_model
61             {@owner_model.item_name => {@owner_model.owner_model.item_name => {}}}
62           else
63             {@owner_model.item_name => {}}
64           end
65         else
66           {}
67         end
68       end
69       
70       def order
71         @model.list_order
72       end
73       
74       def a page, page_size, operators
75         @page = self.page_number(page) 
76         @page_size = self.page_size page_size
77         @offset = (@page -1) * @page_size
78       end
79       
80       def items
81         @model.where(self.where()).includes(self.includes).order(self.order).offset(@offset).limit(@page_size)
82       end
83       
84       def paginate
85         c = @model.where(self.where()).includes(self.includes).count
86         Kaminari.paginate_array(Array.new(c, nil)).page(@offset).per(@page_size)
87       end
88       
89       def self.add_action item_name, action_name, list_name, list_conf
90         return
91       end
92     end
93     
94   end
95 end