OSDN Git Service

fix js 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, :json, :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       puts 'invalid manifest?'
45       p "#{message} for #{message}\n"
46 #      logger.error "#{message} for #{message}\n"
47     end
48     
49     def alert_undefined_message name, location
50       alert_message 'undefined ' + name, location
51     end
52     
53     def load_value _self, json, module_name, klass
54       klass.new(_self, json[module_name], module_name)
55     end
56     
57     def load_name_values _self, jsons, module_name, klass
58       Hash[jsons[module_name].map {|_name, _json|
59         [_name, klass.new(_self, _name, _json, module_name)]
60       }]
61     end
62     
63     def load_type_args _self, jsons, module_name, klass
64       klass.factory_type_args(_self, jsons[module_name], module_name)
65     end
66     
67     def load_type_name_args _self, jsons, module_name, klass
68       Hash[jsons[module_name].map {|_name, _json|
69         [_name, klass.factory(_self, _name, _json, module_name)]
70       }]
71     end
72     
73     def load_names _self, json, module_name, klass
74       json[module_name].map {|_name|
75         klass.new(_self, _name, module_name)
76       }
77     end
78     
79   end
80
81   extend ModuleMethods
82
83 end
84