class Volt::MiddlewareStack

Attributes

middlewares[R]

Public Class Methods

new() click to toggle source
# File lib/volt/server/middleware/middleware_stack.rb, line 9
def initialize
  # Setup the next app
  @middlewares = []
end

Public Instance Methods

build() click to toggle source

Builds a new Rack::Builder with the middleware and the app

# File lib/volt/server/middleware/middleware_stack.rb, line 33
def build
  @builder = Rack::Builder.new

  @middlewares.each do |middleware|
    if middleware[0] == :map
      @builder.map(middleware[1], &middleware[2])
    else
      @builder.use(*middleware[0], &middleware[1])
    end
  end

  @builder.run(@app)
end
call(env) click to toggle source
# File lib/volt/server/middleware/middleware_stack.rb, line 47
def call(env)
  unless @builder
    build
  end

  @builder.call(env)
end
map(path, &block) click to toggle source
# File lib/volt/server/middleware/middleware_stack.rb, line 21
def map(path, &block)
  @middlewares << [:map, path, block]

  # invalidate builder
  @builder = nil
end
run(app) click to toggle source
# File lib/volt/server/middleware/middleware_stack.rb, line 28
def run(app)
  @app = app
end
use(*args, &block) click to toggle source
# File lib/volt/server/middleware/middleware_stack.rb, line 14
def use(*args, &block)
  @middlewares << [args, block]

  # invalidate builder, so it gets built again
  @builder = nil
end