OSDN Git Service

fix manifest list_group tree
[pettanr/pettanr.git] / lib / manifest / manifest.rb
1 module Manifest
2   class Manifest
3     cattr_accessor :manifest
4     attr :system_resources, :magic_numbers,
5       :controllers, :models, :list_groups, :profilers, :filers, :forms, :lists, :views
6     # call me before load routes.rb
7     # routes.rb needs engine_resources manifest in system_resources
8     # ex. it's adding license_groups routes
9     def initialize manifest
10       @manifest = manifest || {}
11       @system_resources = SystemResource.new(self, SystemResource.set_default(@manifest['system_resources']))
12       @magic_numbers = @manifest['magic_numbers']
13     end
14     
15     def init
16       # managers can't initialize before load  application.rb
17       return unless defined? ::Pettanr
18       @controllers = Controller.manager(self, @manifest['controllers'])
19       @models = Model.manager(self, @manifest['models'])
20       @locals = @manifest['locals']
21       @list_groups = ListGroup.manager(self, @locals['list_groups'] || {})
22       @filers = Filer.manager(self, @locals['filers'])
23       @profilers = Profiler.manager(self, @locals['profilers'])
24       @forms = Form.base_manager(self, @locals['forms'])
25       @forms.merge(Form.extend_manager(self, @locals['forms']))
26       @system_resources.init
27       add_action
28     end
29     
30     def add_action
31         return
32       @controllers.each do |controller_name, controller|
33         model_name = controller.model_name
34         next if model_name.blank?
35         controller.actions.each do |action_name, conf|
36           next unless conf['type'] == 'list'
37           list_name = conf['list']['list_name']
38           list = Pettanr::Application::manifest.list_managers[model_name]
39           list.add_action action_name, list_name
40         end
41       end
42     end
43     
44   end
45   
46   module ModuleMethods
47     def manifest
48       Manifest.manifest
49     end
50     
51     def load json
52       Manifest.manifest = Manifest.new json
53     end
54     
55     def item_name_to_model item_name
56       item_name.classify.constantize
57     end
58     
59     def singularize name
60       name.singularize
61     end
62     
63   end
64
65   extend ModuleMethods
66 end
67