OSDN Git Service

fix Manifest lst
[pettanr/pettanr.git] / lib / manifest / model / list / filter.rb
1 module Manifest
2   module ModelModule
3     module ListModule
4       class FilterList < Base
5         
6         def set_default
7           super
8         end
9         
10         def init
11           super
12           return
13         end
14         
15         def where filter_item
16           w = @model.list_where
17           w += ' and ' unless w.blank?
18           [w + @table_name + '.' + @filter_key + ' = ?', filter_item.id] 
19         end
20         
21         def includes
22           return @includes if @includes
23           w = @owner_model ? {@owner_model.item_name => {}} : {}
24           w.merge({@from => {} }) 
25         end
26         
27         def items filter_item
28           @model.where(self.where(filter_item)).includes(self.includes).order(self.order).offset(@offset).limit(@page_size)
29         end
30         
31         def paginate filter_item
32           Kaminari.paginate_array(Array.new(@model.where(self.where(filter_item)).includes(self.includes).count, nil)).page(@offset).per(@page_size)
33         end
34         
35         def self._add_action item_name, action_name, list_name, list_conf
36           return
37           model = item_name.classify.constantize
38           controller_name = model.plural + 'Controller'
39           controller = controller_name.constantize
40           list_list_conf = Pettanr::Application::manifest.list(item_name).lists[list_name] || {}
41           from = list_list_conf['from']
42           filter_model = from.classify.constantize
43           filter_key = list_list_conf['filter_key']
44           return if controller.method_defined?(action_name)
45           controller.define_method(action_name) do 
46             filter_list filter_model, params
47           end
48         end
49         
50       end
51       
52     end
53   end
54 end