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