class Rack::Ketai::Middleware

Public Class Methods

new(app) click to toggle source
# File lib/egalite/keitai/rack/ketai/middleware.rb, line 3
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/egalite/keitai/rack/ketai/middleware.rb, line 7
def call(env)
  carrier = Rack::Ketai::Carrier.load(env)
  return @app.call(env) unless carrier
  
  apply(env, carrier)
end

Private Instance Methods

apply(env, carrier) click to toggle source
# File lib/egalite/keitai/rack/ketai/middleware.rb, line 15
def apply(env, carrier)
  env = env.clone
  env['rack.ketai'] = carrier
  env = carrier.filters.inject(env) { |env, filter| filter.inbound(env) }
  ret = @app.call(env)
  ret[2] = ret[2].body if ret[2].is_a?(Rack::Response)
  carrier.filters.reverse.inject(ret) { |r, filter| filter.outbound(*r) }
end