OSDN Git Service

fix local_manifest
[pettanr/pettanr.git] / lib / manifest_base / base.rb
1 module ManifestBase
2   class Base
3     def self.load manifest, jsons, module_name
4       Hash[jsons[module_name].map {|name, json|
5         [name, self.new(manifest, name, json, module_name)]
6       }]
7     end
8     
9     attr :manifest, :name, :name, :module_name
10     
11     def initialize manifest, name, json, module_name
12       @manifest = manifest
13       @name = name
14       @json = json
15       @module_name = module_name
16       self.set_default
17       self.init
18     end
19     
20     def set_default
21     end
22     
23     def init
24     end
25     
26     def module_names
27       @manifest.module_names + [@module_name, @name]
28     end
29     
30   end
31   
32   module ModuleMethods
33     def require_modules path, names
34       names.each do |name|
35         require_dependency path + name.to_s
36       end
37     end
38     
39     def module_message module_names, my_module_names = []
40       (module_names + my_module_names).join(' > ')
41     end
42     
43     def alert_message message, location
44       raise "#{message} for #{message}\n"
45     end
46     
47     def alert_undefined_message name, location
48       alert_message 'undefined ' + name, location
49     end
50     
51     def load_value _self, json, module_name, klass
52       klass.new(_self, json[module_name], module_name)
53     end
54     
55     def load_name_values _self, jsons, module_name, klass
56       Hash[jsons[module_name].map {|_name, _json|
57         [_name, klass.new(_self, _name, _json, module_name)]
58       }]
59     end
60     
61     def load_type_args _self, jsons, module_name, klass
62       klass.factory_type_args(_self, jsons[module_name], module_name)
63     end
64     
65     def load_type_name_args _self, jsons, module_name, klass
66       Hash[jsons[module_name].map {|_name, _json|
67         [_name, klass.factory(_self, _name, _json, module_name)]
68       }]
69     end
70     
71     # LocalManifest::Profiler::Association::HasMany
72     def load_names _self, json, module_name, klass
73       json[module_name].map {|_name|
74         klass.new(_self, _name, module_name)
75       }
76     end
77     
78   end
79
80   extend ModuleMethods
81
82 end
83