OSDN Git Service

7dc85cd3e63102d64087e5563f1f2cbf3124a117
[pettanr/pettanr.git] / lib / manifest / list.rb
1 require "manifest/list/base"
2
3 module Manifest
4   class List
5     include ListModule
6     
7     def self.manager manifest, my_manifests
8       my_manifests.each {|list_name, list_manifest|
9         self.new(manifest, list_name, list_manifest)
10       }
11     end
12     
13     @@types = {
14       'public' => PublicList, 'private' => PrivateList, 'system_resource' => SystemResourceList,
15       'has_many' => HasManyList, 'has_many_through' => HasManyThroughList, 'filter' => FilterList, 
16       'through_filter' => ThroughFilterList, 'element_filter' => ElementFilterList, 
17       'play' => PlayList
18     }
19     attr :list_name, :list_manifest,
20       :default_page_size, :max_page_size
21     def initialize manifest, list_name, list_manifest
22       @manifest = manifest
23       @list_name = list_name
24       @list_manifest = list_manifest
25       self.set_default
26       self.init
27       @list_manifest.lists.each {|list_name, conf|
28         type = conf['type']
29         @lists[list_name] = @@types[type]
30       }
31     end
32     
33     def set_default
34       @list_manifest['lists'] ||= {}
35       @list_manifest['default_page_size'] ||= 25
36       @list_manifest['max_page_size'] ||= 100
37     end
38     
39     def init
40       @default_page_size = @list_manifest['default_page_size']
41       @max_page_size = @list_manifest['max_page_size']
42       @lists = {}
43       @list_manifest['lists'].each {|list_name, list_manifest|
44         raise "undefined type for models > #{@model_name} > attributes > #{attribute_name}\n" unless attribute_manifest['type']
45         @lists[list_name] = List.new(self, list_name, list_manifest)
46       }
47     end
48     
49     def open list_name, page, page_size, operators
50       raise "undefined list for #{@item_name}::#{list_name}\nconf:#{@list_conf}\n" unless @lists[list_name]
51       @lists[list_name].new page, page_size, operators, @item_name, list_name, @list_conf, @manifest
52     end
53     
54       def filer opt =  nil
55         paginate = opt ? @list.paginate(opt) : @list.paginate
56         @filer ||= @manifest.filer_managers[@item_name].open(@item_name, @items, @operators, paginate)
57       end
58       
59     def add_action action_name, list_name
60       @lists[list_name].add_action @item_name, action_name, list_name, @list_conf
61     end
62     
63   end
64 end