Class: Volt::MiddlewareStack

Inherits:
Object
  • Object
show all
Defined in:
lib/volt/server/middleware/middleware_stack.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMiddlewareStack

Returns a new instance of MiddlewareStack.



9
10
11
12
13
# File 'lib/volt/server/middleware/middleware_stack.rb', line 9

def initialize
  # Setup the next app
  @middlewares = []
  @maps = []
end

Instance Attribute Details

#middlewaresObject (readonly)

Returns the value of attribute middlewares.



7
8
9
# File 'lib/volt/server/middleware/middleware_stack.rb', line 7

def middlewares
  @middlewares
end

Instance Method Details

#buildObject

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



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/volt/server/middleware/middleware_stack.rb', line 36

def build
  @builder = Rack::Builder.new

  @maps.each do |path, block|
    @builder.map(path, &block)
  end

  @middlewares.each do |middleware|
    @builder.use(*middleware[0], &middleware[1])
  end

  @builder.run(@app)
end

#call(env) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/volt/server/middleware/middleware_stack.rb', line 50

def call(env)
  unless @builder
    build
  end

  @builder.call(env)
end

#map(path, &block) ⇒ Object



27
28
29
# File 'lib/volt/server/middleware/middleware_stack.rb', line 27

def map(path, &block)
  @maps << [path, block]
end

#run(app) ⇒ Object



31
32
33
# File 'lib/volt/server/middleware/middleware_stack.rb', line 31

def run(app)
  @app = app
end

#use(*args, &block) ⇒ Object

Set the app that gets called after the middleware runs def set_app(app)

@app = app

end



20
21
22
23
24
25
# File 'lib/volt/server/middleware/middleware_stack.rb', line 20

def use(*args, &block)
  @middlewares << [args, block]

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