OSDN Git Service

change form manifest
[pettanr/pettanr.git] / lib / manifest / manifest.rb
index 12f5c89..bc56116 100644 (file)
@@ -2,49 +2,84 @@ module Manifest
   class Manifest
     cattr_accessor :manifest
     attr :system_resources, :magic_numbers,
-      :controllers, :models, 
-      :list_groups, :profilers, :filers, :forms
+      :items, :controllers, :models, :module_names, 
+      :inflectors, :singulars, :plurals
     # call me before load routes.rb
     # routes.rb needs engine_resources manifest in system_resources
     # ex. it's adding license_groups routes
-    def initialize manifest
-      @manifest = manifest || {}
-      @system_resources = SystemResource.new(self, SystemResource.set_default(@manifest['system_resources']))
-      @magic_numbers = @manifest['magic_numbers']
+    def initialize global_json
+      @module_names = []
+      @global_json = global_json || {}
+      @system_resources = SystemResource.new(self, SystemResource.set_default(@global_json['system_resources']))
+      @magic_numbers = @global_json['magic_numbers']
     end
     
     def init
       # managers can't initialize before load  application.rb
       return unless defined? ::Pettanr
-      @controllers = Controller.manager(self, @manifest['controllers'] || {})
-      @models = Model.manager(self, @manifest['models'] || {})
-      @locals = @manifest['locals']
-      @list_groups = ListGroup.manager(self, @locals['list_groups'] || {})
-      @filers = Filer.manager(self, @locals['filers'] || {})
-      @profilers = Profiler.manager(self, @locals['profilers'] || {})
-      @forms = Form.base_manager(self, @locals['forms'] || {})
-      @forms.merge(Form.extend_manager(self, @locals['forms'] || {}))
+      @inflectors = @global_json['inflectors']
+      @item_names = {}
+      @table_names = {}
+      @inflectors.each do |item_name, table_name|
+        @item_names[item_name] = table_name  # monkey copy
+        @table_names[table_name] = item_name
+      end
+      @items = ManifestBase.load_type_name_args(self, @global_json, 'items', ItemFactory)
+      @controllers = Controller.load(self, @global_json, 'controllers')
+      self.replace_action_alias
+      @models = Model.load(self, @global_json, 'models')
+    end
+    
+    def init_after_load_manifest
       @system_resources.init
     end
     
+    def replace_action_alias
+      replaces = {}
+      @controllers.each do |controller_name, controller_manifest|
+        controller_manifest.actions.each do |action_name, action_manifest|
+          next unless action_manifest.alias
+          alias_action = action_manifest.alias_action
+          next unless alias_action.type == action_manifest.type
+          args = {}
+          action_manifest.a_arg_names.each do |name|
+            args[name] = action_manifest.__send__(name) || alias_action.__send__(name)
+          end
+          action_manifest.b_arg_names.each do |name|
+            args[name] = alias_action.__send__(name) || action_manifest.__send__(name)
+          end
+          args['original'] = action_manifest
+          json = {'type' => alias_action.type, 'args' => args}
+          new_action_manifest = ControllerModule::ActionFactory.factory(
+            controller_manifest, action_manifest.name, json, action_manifest.module_name
+          )
+          replaces[controller_name] ||= {}
+          replaces[controller_name][action_name] = new_action_manifest
+        end
+      end
+      replaces.each do |controller_name, controller|
+        controller.each do |action_name, action_manifest|
+          ::Manifest.manifest.controllers[controller_name].actions[action_name] = action_manifest
+        end
+      end
+    end
+    
     def load_models_manifest
       @models.each do |model_name, model|
+        # skip extend model.
+        next unless @items[model.name]
         model.classify.load_manifest
       end
     end
     
-    def add_action
-        return
-      @controllers.each do |controller_name, controller|
-        model_name = controller.model_name
-        next if model_name.blank?
-        controller.actions.each do |action_name, conf|
-          next unless conf['type'] == 'list'
-          list_name = conf['list']['list_name']
-          list = Pettanr::Application::manifest.list_managers[model_name]
-          list.add_action action_name, list_name
-        end
-      end
+    # table_name to item_name
+    def singularize table_name
+      @table_names[table_name]
+    end
+    
+    # item_name to table_name
+    def pluralize item_name
+      @item_names[item_name]
     end
     
   end
@@ -54,22 +89,14 @@ module Manifest
       Manifest.manifest
     end
     
-    def load json
-      Manifest.manifest = Manifest.new json
+    def load global_json
+      Manifest.manifest = Manifest.new global_json
     end
     
     def item_name_to_model item_name
       item_name.classify.constantize
     end
     
-    def singularize name
-      name.singularize
-    end
-    
-    def pluralize name
-      name.pluralize
-    end
-    
   end
 
   extend ModuleMethods