OSDN Git Service

fix orm
[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/foreign_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, 'through_filter' => ThroughFilterList, 'foreign_filter' => ForeignFilterList, 
15         'play' => PlayList
16       }
17       def self.factory manifest, item_name, my_manifests
18         lists = {}
19         my_manifests.each {|list_name, my_manifest|
20           model_manifest = manifest.models[item_name]
21           raise "undefined model for lists > #{item_name}\n" unless model_manifest
22           model_list_manifest = model_manifest.lists[list_name]
23           raise "undefined model_list for lists > #{item_name} > #{list_name}\n" unless model_list_manifest
24           type = model_list_manifest.type
25           raise "undefined type for lists > #{item_name} > #{list_name}\n" unless type
26           my_class = @@types[type]
27           raise "undefined class for lists > #{item_name} > #{list_name} > #{type}\n" unless my_class
28           lists[list_name] = my_class.new(manifest, item_name, list_name, my_manifest)
29         }
30         lists
31       end
32       
33     end
34   end
35   
36   class List
37     include ListModule
38     def self.manager manifest, my_manifests
39       lists = {}
40       my_manifests.each {|item_name, list_manifest|
41         lists[item_name] = ListModule::ListFactory.factory(manifest, item_name, list_manifest)
42       }
43       lists
44     end
45   end
46   
47 end
48