Method: Hanami::Slice::Routing::Middleware::Stack#use

Defined in:
lib/hanami/slice/routing/middleware/stack.rb

#use(spec, *args, path_prefix: ::Hanami::Router::DEFAULT_PREFIX, before: nil, after: nil, **kwargs, &blk) ⇒ self

Adds a middleware to the stack.

Examples:

# Using a symbol name; adds Hanami::Middleware::BodyParser.new([:json])
middleware.use :body_parser, :json

# Using a class name
middleware.use MyMiddleware

# Adding a middleware before or after others
middleware.use MyMiddleware, before: SomeMiddleware
middleware.use MyMiddleware, after: OtherMiddleware

Parameters:

  • spec (Symbol, Class)

    the middleware name or class name

  • args (Array, nil)

    Arguments to pass to the middleware’s .new method

  • before (Class, nil) (defaults to: nil)

    an optional (already added) middleware class to add the middleware before

  • after (Class, nil) (defaults to: nil)

    an optional (already added) middleware class to add the middleware after

Returns:

  • (self)

Since:

  • 2.0.0



94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/hanami/slice/routing/middleware/stack.rb', line 94

def use(spec, *args, path_prefix: ::Hanami::Router::DEFAULT_PREFIX, before: nil, after: nil, **kwargs, &blk)
  middleware = resolve_middleware_class(spec)
  item = [middleware, args, kwargs, blk]

  if before
    @stack[path_prefix].insert((idx = index_of(before, path_prefix)).zero? ? 0 : idx - 1, item)
  elsif after
    @stack[path_prefix].insert(index_of(after, path_prefix) + 1, item)
  else
    @stack[path_prefix].push(item)
  end

  self
end