Class: ActionDispatch::Callbacks

Inherits:
Object
  • Object
show all
Includes:
ActiveSupport::Callbacks
Defined in:
lib/action_dispatch/middleware/callbacks.rb

Overview

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.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, prepare_each_request = false) ⇒ Callbacks

Returns a new instance of Callbacks.


38
39
40
41
# 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

Class Method Details

.after(*args, &block) ⇒ Object


34
35
36
# File 'lib/action_dispatch/middleware/callbacks.rb', line 34

def self.after(*args, &block)
  set_callback(:call, :after, *args, &block)
end

.before(*args, &block) ⇒ Object


30
31
32
# File 'lib/action_dispatch/middleware/callbacks.rb', line 30

def self.before(*args, &block)
  set_callback(:call, :before, *args, &block)
end

.to_prepare(*args, &block) ⇒ Object

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.


21
22
23
24
25
26
27
28
# 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

Instance Method Details

#call(env) ⇒ Object


43
44
45
46
47
48
# 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