Parent

Methods

Class Index [+]

Quicksearch

Rack::Handler::WEBrick

Public Class Methods

new(server, app) click to toggle source

(Not documented)

    # File lib/rack/handler/webrick.rb, line 17
17:       def initialize(server, app)
18:         super server
19:         @app = Rack::ContentLength.new(app)
20:       end
run(app, options={}) click to toggle source

(Not documented)

    # File lib/rack/handler/webrick.rb, line 8
 8:       def self.run(app, options={})
 9:         options[:BindAddress] = options.delete(:Host) if options[:Host]
10:         server = ::WEBrick::HTTPServer.new(options)
11:         server.mount "/", Rack::Handler::WEBrick, app
12:         trap(:INT) { server.shutdown }
13:         yield server  if block_given?
14:         server.start
15:       end

Public Instance Methods

service(req, res) click to toggle source

(Not documented)

    # File lib/rack/handler/webrick.rb, line 22
22:       def service(req, res)
23:         env = req.meta_vars
24:         env.delete_if { |k, v| v.nil? }
25: 
26:         rack_input = StringIO.new(req.body.to_s)
27:         rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding)
28: 
29:         env.update({"rack.version" => [1,1],
30:                      "rack.input" => rack_input,
31:                      "rack.errors" => $stderr,
32: 
33:                      "rack.multithread" => true,
34:                      "rack.multiprocess" => false,
35:                      "rack.run_once" => false,
36: 
37:                      "rack.url_scheme" => ["yes", "on", "1"].include?(ENV["HTTPS"]) ? "https" : "http"
38:                    })
39: 
40:         env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
41:         env["QUERY_STRING"] ||= ""
42:         env["REQUEST_PATH"] ||= "/"
43:         unless env["PATH_INFO"] == ""
44:           path, n = req.request_uri.path, env["SCRIPT_NAME"].length
45:           env["PATH_INFO"] = path[n, path.length-n]
46:         end
47: 
48:         status, headers, body = @app.call(env)
49:         begin
50:           res.status = status.to_i
51:           headers.each { |k, vs|
52:             if k.downcase == "set-cookie"
53:               res.cookies.concat vs.split("\n")
54:             else
55:               vs.split("\n").each { |v|
56:                 res[k] = v
57:               }
58:             end
59:           }
60:           body.each { |part|
61:             res.body << part
62:           }
63:         ensure
64:           body.close  if body.respond_to? :close
65:         end
66:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.