While middleware can be added in your rackup file to wrap your Scorched application, it can be more desirable to add the middleware at the controller level. Scorched itself requires this as it needs to include a set of Rack middleware out-of-the-box. Developers can't be expected to manually add these to their rackup file for every Scorched application.

Like filters, middleware is inheritable thanks to it's use of the Scorched::Collection class. Also like filters, middleware proc's are only run once per request, which prevents unintended double-loading of middleware.

Adding middleware to a Scorched controller involves pushing a proc onto the end of the middleware collection, accessible via the middleware accessor method. The given proc is instance_exec'd in the context of a Rack builder object, and so can be used for more than just loading middleware.

middleware << proc do
  use Rack::Session::Cookie, secret: 'blah'
  # Stolen from Rack's own documentation...
  map "/lobster" do
    use Rack::Lint
    run Rack::Lobster.new