class Namira::Stack

The middleware stack used to send a request

Public Class Methods

default() click to toggle source

The default middleware stack

# File lib/namira/stack.rb, line 8
def default
  Stack.new do
    use Middleware::Config
    use Middleware::Header
    use Middleware::Timing
    use Middleware::Redirector
    use Middleware::Logger
    use Middleware::Timeout
    use Middleware::Network
    use Middleware::Responder
  end
end
new(&block) click to toggle source
# File lib/namira/stack.rb, line 22
def initialize(&block)
  @middleware = []
  instance_eval(&block)
end

Public Instance Methods

call(env) click to toggle source

Called by the middleware runner.

@param env [Namira::Env] The request environment

# File lib/namira/stack.rb, line 31
def call(env)
  raise ArgumentError, 'Invalid environment' unless env.is_a?(Namira::Env)

  to_app.call(env)
end
use(klass, *args, &block) click to toggle source

Add a class to the middleware stack

@param klass [Class, call] The middleware class @param args [Any] Arguments passed to the class initializer @param block [Block] A block to pass to the class initializer

# File lib/namira/stack.rb, line 43
def use(klass, *args, &block)
  @middleware << lambda do |app|
    klass.new(app, *args, &block)
  end
end

Private Instance Methods

to_app() click to toggle source
# File lib/namira/stack.rb, line 51
def to_app
  application = ->(env) { env }
  @middleware.reverse.inject(application) do |app, component|
    component.call(app)
  end
end