OSDN Git Service

557a4ddeaf09d394db7b519fa1aba4b93e75a858
[pettanr/pettanr.git] / lib / manifest / list.rb
1 require_dependency "manifest/list/base"
2 require_dependency "manifest/list/public"
3 require_dependency "manifest/list/private"
4 require_dependency "manifest/list/system_resource"
5 require_dependency "manifest/list/filter"
6 require_dependency "manifest/list/through_filter"
7 require_dependency "manifest/list/element_filter"
8 require_dependency "manifest/list/play"
9 module Manifest
10   module ListModule
11     class ListFactory
12       @@types = {
13         'public' => ListModule::PublicList, 'private' => PrivateList, 'system_resource' => SystemResourceList,
14         'filter' => FilterList, 
15         'through_filter' => ThroughFilterList, 'element_filter' => ElementFilterList, 
16         'play' => PlayList
17       }
18       def self.factory manifest, item_name, my_manifests
19         lists = {}
20         my_manifests.each {|list_name, my_manifest|
21           model_manifest = manifest.models[item_name]
22           raise "undefined model for lists > #{item_name}\n" unless model_manifest
23           model_list_manifest = model_manifest.lists[list_name]
24           raise "undefined model_list for lists > #{item_name} > #{list_name}\n" unless model_list_manifest
25           type = model_list_manifest.type
26           raise "undefined type for lists > #{item_name} > #{list_name}\n" unless type
27           my_class = @@types[type]
28           raise "undefined class for lists > #{item_name} > #{list_name} > #{type}\n" unless my_class
29           my_class.new(manifest, item_name, list_name, my_manifest)
30         }
31         lists
32       end
33       
34     end
35   end
36   
37   class List
38     include ListModule
39     def self.manager manifest, my_manifests
40       lists = {}
41       my_manifests.each {|item_name, list_manifest|
42         lists[item_name] = ListModule::ListFactory.factory(manifest, item_name, list_manifest)
43       }
44       lists
45     end
46   end
47   
48 end
49