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
# File 'lib/volt/server/middleware/middleware_stack.rb', line 9

def initialize
  # Setup the next app
  @middlewares = []
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



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