Class: Volt::MiddlewareStack
- Defined in:
- lib/volt/server/middleware/middleware_stack.rb
Instance Attribute Summary collapse
-
#middlewares ⇒ Object
readonly
Returns the value of attribute middlewares.
Instance Method Summary collapse
-
#build ⇒ Object
Builds a new Rack::Builder with the middleware and the app.
- #call(env) ⇒ Object
-
#initialize ⇒ MiddlewareStack
constructor
A new instance of MiddlewareStack.
- #map(path, &block) ⇒ Object
- #run(app) ⇒ Object
- #use(*args, &block) ⇒ Object
Constructor Details
#initialize ⇒ MiddlewareStack
Returns a new instance of MiddlewareStack.
9 10 11 12 |
# File 'lib/volt/server/middleware/middleware_stack.rb', line 9 def initialize # Setup the next app @middlewares = [] end |
Instance Attribute Details
#middlewares ⇒ Object (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
#build ⇒ Object
Builds a new Rack::Builder with the middleware and the app
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# 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) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/volt/server/middleware/middleware_stack.rb', line 47 def call(env) unless @builder build end @builder.call(env) end |
#map(path, &block) ⇒ Object
21 22 23 24 25 26 |
# 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) ⇒ Object
28 29 30 |
# File 'lib/volt/server/middleware/middleware_stack.rb', line 28 def run(app) @app = app end |
#use(*args, &block) ⇒ Object
14 15 16 17 18 19 |
# 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 |