class ActionDispatch::Callbacks

def self.to_prepare(*args, &block)

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

request in development mode, and before the first request in production mode.
Add a preparation callback. Preparation callbacks are run before every
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