   # @note `guard` must be a string, where string is a method from `controller` or function
   # @note you might create in controller method with name: `before_x`, where `x` you action, then you may not specify `before` into params, it automatically find and assigned as `before` method, the same for `after` and `guard`
   # @note `data` must be a string, or array of string
-  constructor: (params) ->
+  constructor: (params, wrapper = (x) -> x) ->
     controller = params['controller'] || throw new Error("Params must contain a Controller")
 
 
     act = params['action']
 
-    @action = if Sirius.Utils.is_string(act)
+    action = if Sirius.Utils.is_string(act)
                 controller[act]
               else if Sirius.Utils.is_function(act)
                 act
               else
                 throw new Error("Action must be string or function");
+
+    @action = wrapper(action)
 
     if !Sirius.Utils.is_function(@action) && !Sirius.Utils.is_string(@action)
       throw new Error("Action must be string or function")

#
class Sirius.ControlFlow

  # @param params [Object] - object from route
  #
  # `params` is a object with have a next keys `controller`, `action`, `before`, `after`, `data`, `guard`.
  # @note `controller` required
  # @note `action` required

#   }
#   my_logger = function(msg) { console.log("Log: " + msg); }
#
#   Sirius.Application.run({ route : routes, logger: my_logger, log: true, start: "#/" });
#
Sirius.Application =
  ###
