OSDN Git Service

fix alias action
[pettanr/pettanr.git] / lib / manifest / manifest.rb
index 1fc9df7..bc56116 100644 (file)
@@ -26,6 +26,7 @@ module Manifest
       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
     
@@ -33,6 +34,36 @@ module 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.