スタックは次のようになります。
use CommonMiddleware
map '/something' do
use SpecialMiddleware
run TheApp.new
end
map '/' do
run TheApp.new
end
あるいは、リクエストパスを見て、必要に応じて他の特別なミドルウェアを実行するミドルウェアを作成することもできます - そのためのラッパーのようなものです。機械は次のようになります。
def initialize app, special_middleware
@app, @special_middleware = app, special_middleware
end
def call env
if route_matches?(env)
@special_middleware.new(@app).call(env) # assumes special_middleware initializer takes no extra parameters
else
@app.call(env)
end
end
def route_matches? env
# examine the rack environment hash, return true or false
end
そして、それを使用するための構成は次のようになります。
use RouteMatchingMiddleware, SpecialMiddleware
run TheApp.new