OSDN Git Service

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