class M2R::RackHandler

Handle Mongrel2 requests using Rack application @private

Attributes

app[RW]

Public Class Methods

new(app, connection_factory, parser) click to toggle source
Calls superclass method M2R::Handler::new
# File lib/m2r/rack_handler.rb, line 10
def initialize(app, connection_factory, parser)
  @app = app
  super(connection_factory, parser)
end

Public Instance Methods

after_all(request, response) click to toggle source
# File lib/m2r/rack_handler.rb, line 41
def after_all(request, response)
  request.free!
end
process(request) click to toggle source
# File lib/m2r/rack_handler.rb, line 15
def process(request)
  script_name = request.pattern.split('(', 2).first.gsub(/\/$/, '')

  env = {
    'REQUEST_METHOD'    => request.method,
    'SCRIPT_NAME'       => script_name,
    'PATH_INFO'         => request.path.gsub(script_name, ''),
    'QUERY_STRING'      => request.query || "",
    'rack.version'      => ::Rack::VERSION,
    'rack.errors'       => $stderr,
    'rack.multithread'  => false,
    'rack.multiprocess' => true,
    'rack.run_once'     => false,
    'rack.url_scheme'   => request.scheme,
    'rack.input'        => request.body_io
  }
  env['SERVER_NAME'], env['SERVER_PORT'] = request.headers['Host'].split(':', 2)
  request.headers.rackify(env)

  status, headers, body = @app.call(env)
  buffer = ""
  body.each { |part| buffer << part }
  body.close if body.respond_to?(:close)
  return Response.new.status(status).headers(headers).body(buffer)
end