MiddlewareStackProxy
is a proxy for the Rails
middleware stack that allows you to configure middlewares in your application. It works basically as a command recorder, saving each command to be applied after initialization over the default middleware stack, so you can add, swap, or remove any middleware in Rails
.
You can add your own middlewares by using the config.middleware.use
method:
config.middleware.use Magical::Unicorns
This will put the Magical::Unicorns
middleware on the end of the stack. You can use insert_before
if you wish to add a middleware before another:
config.middleware.insert_before Rack::Head, Magical::Unicorns
There's also insert_after
which will insert a middleware after another:
config.middleware.insert_after Rack::Head, Magical::Unicorns
Middlewares can also be completely swapped out and replaced with others:
config.middleware.swap ActionDispatch::Flash, Magical::Unicorns
Middlewares can be moved from one place to another:
config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns
This will move the Magical::Unicorns
middleware before the ActionDispatch::Flash
. You can also move it after:
config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns
And finally they can also be removed from the stack completely:
config.middleware.delete ActionDispatch::Flash
# File railties/lib/rails/configuration.rb, line 47 def initialize(operations = [], delete_operations = []) @operations = operations @delete_operations = delete_operations end
# File railties/lib/rails/configuration.rb, line 70 def delete(...) @delete_operations << -> middleware { middleware.delete(...) } end
# File railties/lib/rails/configuration.rb, line 58 def insert_after(...) @operations << -> middleware { middleware.insert_after(...) } end
# File railties/lib/rails/configuration.rb, line 52 def insert_before(...) @operations << -> middleware { middleware.insert_before(...) } end
# File railties/lib/rails/configuration.rb, line 80 def move_after(...) @delete_operations << -> middleware { middleware.move_after(...) } end
# File railties/lib/rails/configuration.rb, line 74 def move_before(...) @delete_operations << -> middleware { middleware.move_before(...) } end
# File railties/lib/rails/configuration.rb, line 62 def swap(...) @operations << -> middleware { middleware.swap(...) } end
# File railties/lib/rails/configuration.rb, line 84 def unshift(...) @operations << -> middleware { middleware.unshift(...) } end
# File railties/lib/rails/configuration.rb, line 66 def use(...) @operations << -> middleware { middleware.use(...) } end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.