class Rack::Handler::Miniserver

Constants

DEFAULT_OPTIONS
RACK_ERRORS
RACK_INPUT
RACK_MULTIPROCESS
RACK_MULTITHREAD
RACK_RUN_ONCE
RACK_URL_SCHEME
RACK_VERSION

Public Class Methods

new(app) click to toggle source
# File lib/rack/handler/miniserver.rb, line 47
def initialize(app)
  @app = app
end
run(app, options={}) { |server| ... } click to toggle source
# File lib/rack/handler/miniserver.rb, line 25
def run(app, options={})
  options = DEFAULT_OPTIONS.merge(options)

  options[:host] = options.delete(:Host)
  options[:port] = options.delete(:Port)
  options[:daemonize] = false

  server = ::Miniserver::Server.new(app, options)

  yield(server) if block_given?

  server.start
end
valid_options() click to toggle source
# File lib/rack/handler/miniserver.rb, line 39
def valid_options
  {
    "Host=HOST" => "Hostname to listen on (default: 0.0.0.0)",
    "Port=PORT" => "Port to listen on (default: 8080)",
  }
end

Public Instance Methods

process(request, response) click to toggle source
# File lib/rack/handler/miniserver.rb, line 51
def process(request, response)
  env = Hash.new

  request.headers.each_pair do |name, value|
    name = "#{::Miniserver::HTTP_PREFIX}#{name.upcase.tr(::Miniserver::MINUS, ::Miniserver::UNDERLINE)}"
    env[name] = value
  end

  %w(CONTENT_TYPE CONTENT_LENGTH).each do |name|
    env[name] = env.delete("HTTP_#{name}") if env["HTTP_#{name}"]
  end

  uri = URI(request.request_url)

  env[::Miniserver::REQUEST_METHOD] = request.http_method
  env[::Miniserver::REMOTE_ADDR]    = request.remote_addr
  env[::Miniserver::SERVER_NAME]    = request.server_name
  env[::Miniserver::SERVER_PORT]    = request.server_port
  env[::Miniserver::QUERY_STRING]   = request.query_string
  env[::Miniserver::REQUEST_PATH]   = uri.path
  env[::Miniserver::PATH_INFO]      = uri.path
  env[::Miniserver::SCRIPT_NAME]    = ::Miniserver::EMPTY_STRING
  env[::Miniserver::FRAGMENT]       = uri.fragment || ::Miniserver::EMPTY_STRING

  env[RACK_ERRORS]                  = STDERR
  env[RACK_INPUT]                   = StringIO.new(request.body)
  env[RACK_VERSION]                 = Rack::VERSION
  env[RACK_MULTITHREAD]             = false
  env[RACK_MULTIPROCESS]            = false
  env[RACK_RUN_ONCE]                = false
  env[RACK_URL_SCHEME]              = ::Miniserver::HTTP

  begin
    response.parse(*@app.call(env))
  ensure
    request.body.clear
  end
end