OSDN Git Service

rename model name
[pettanr/pettanr.git] / lib / manifest / manifest.rb
1 module Manifest
2   class Manifest
3     cattr_accessor :manifest
4     attr :system_resources, :magic_numbers,
5       :items, :controllers, :models, :module_names, 
6       :inflectors, :singulars, :plurals
7     # call me before load routes.rb
8     # routes.rb needs engine_resources manifest in system_resources
9     # ex. it's adding license_groups routes
10     def initialize global_json
11       @module_names = []
12       @global_json = global_json || {}
13       @system_resources = SystemResource.new(self, SystemResource.set_default(@global_json['system_resources']))
14       @magic_numbers = @global_json['magic_numbers']
15     end
16     
17     def init
18       # managers can't initialize before load  application.rb
19       return unless defined? ::Pettanr
20       @inflectors = @global_json['inflectors']
21       @item_names = {}
22       @table_names = {}
23       @inflectors.each do |item_name, table_name|
24         @item_names[item_name] = table_name  # monkey copy
25         @table_names[table_name] = item_name
26       end
27       @items = ManifestBase.load_type_name_args(self, @global_json, 'items', ItemFactory)
28       @controllers = Controller.load(self, @global_json, 'controllers')
29       @models = Model.load(self, @global_json, 'models')
30     end
31     
32     def init_after_load_manifest
33       @system_resources.init
34     end
35     
36     def load_models_manifest
37       @models.each do |model_name, model|
38         # skip extend model.
39         next unless @items[model.name]
40         model.classify.load_manifest
41       end
42     end
43     
44     # table_name to item_name
45     def singularize table_name
46       @table_names[table_name]
47     end
48     
49     # item_name to table_name
50     def pluralize item_name
51       @item_names[item_name]
52     end
53     
54   end
55   
56   module ModuleMethods
57     def manifest
58       Manifest.manifest
59     end
60     
61     def load global_json
62       Manifest.manifest = Manifest.new global_json
63     end
64     
65     def item_name_to_model item_name
66       item_name.classify.constantize
67     end
68     
69   end
70
71   extend ModuleMethods
72 end
73