Class: Tetrahedron::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/tetrahedron/middleware.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Middleware

Returns a new instance of Middleware.



9
10
11
# File 'lib/tetrahedron/middleware.rb', line 9

def initialize(app)
  @app = app
end

Class Method Details

.install(application) ⇒ Object



19
20
21
22
23
# File 'lib/tetrahedron/middleware.rb', line 19

def self.install(application)
  middleware = Class.new(self)
  application.const_set('Middleware', middleware)
  middleware.class_variable_set(:@@stack, [])
end

.use(middleware, *args, &block) ⇒ Object



3
4
5
6
7
# File 'lib/tetrahedron/middleware.rb', line 3

def self.use(middleware, *args, &block)
  stack = self.class_variable_get(:@@stack)
  stack << proc { |app| middleware.new(app, *args, &block) }
  self.class_variable_set(:@@stack, stack)
end

Instance Method Details

#call(env) ⇒ Object



13
14
15
16
17
# File 'lib/tetrahedron/middleware.rb', line 13

def call(env)
  middlewares = self.class.class_variable_get(:@@stack).reverse
  wrapped = middlewares.inject(@app) {|_, middleware| middleware[_]}
  wrapped.call(env)
end