class ActionDispatch::Callbacks

Provide callbacks to be executed before and after the request dispatch.

It also provides a ::to_prepare callback, which is performed in all requests in development by only once in production and notification callback for async operations.

Public Instance Methods

call(env) click to toggle source
# File lib/action_dispatch/middleware/callbacks.rb, line 43
def call(env)
  _run_call_callbacks do
    _run_prepare_callbacks if @prepare_each_request
    @app.call(env)
  end
end

Public Class Methods

after(*args, &block) click to toggle source
# File lib/action_dispatch/middleware/callbacks.rb, line 34
def self.after(*args, &block)
  set_callback(:call, :after, *args, &block)
end
before(*args, &block) click to toggle source
# File lib/action_dispatch/middleware/callbacks.rb, line 30
def self.before(*args, &block)
  set_callback(:call, :before, *args, &block)
end
new(app, prepare_each_request = false) click to toggle source
# File lib/action_dispatch/middleware/callbacks.rb, line 38
def initialize(app, prepare_each_request = false)
  @app, @prepare_each_request = app, prepare_each_request
  _run_prepare_callbacks
end
to_prepare(*args, &block) click to toggle source

Add a preparation callback. Preparation callbacks are run before every request in development mode, and before the first request in production mode.

If a symbol with a block is given, the symbol is used as an identifier. That allows ::to_prepare to be called again with the same identifier to replace the existing callback. Passing an identifier is a suggested practice if the code adding a preparation block may be reloaded.

# File lib/action_dispatch/middleware/callbacks.rb, line 21
def self.to_prepare(*args, &block)
  if args.first.is_a?(Symbol) && block_given?
    define_method :"__#{args.first}", &block
    set_callback(:prepare, :"__#{args.first}")
  else
    set_callback(:prepare, *args, &block)
  end
end