class Tetrahedron::Middleware

Public Class Methods

install(application) click to toggle source
# 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
new(app) click to toggle source
# File lib/tetrahedron/middleware.rb, line 9
def initialize(app)
  @app = app
end
use(middleware, *args, &block) click to toggle source
# 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

Public Instance Methods

call(env) click to toggle source
# 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