aboutsummaryrefslogtreecommitdiffstats
path: root/lib/webrick/cgi.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/webrick/cgi.rb')
-rw-r--r--lib/webrick/cgi.rb52
1 files changed, 50 insertions, 2 deletions
diff --git a/lib/webrick/cgi.rb b/lib/webrick/cgi.rb
index 806d050bc9..80f636edc3 100644
--- a/lib/webrick/cgi.rb
+++ b/lib/webrick/cgi.rb
@@ -13,10 +13,44 @@ require "webrick/config"
require "stringio"
module WEBrick
+
+ # A CGI library using WEBrick requests and responses.
+ #
+ # Example:
+ #
+ # class MyCGI < WEBrick::CGI
+ # def do_GET req, res
+ # res.body = 'it worked!'
+ # res.status = 200
+ # end
+ # end
+ #
+ # MyCGI.new.start
+
class CGI
+
+ # The CGI error exception class
+
CGIError = Class.new(StandardError)
- attr_reader :config, :logger
+ ##
+ # The CGI configuration. This is based on WEBrick::Config::HTTP
+
+ attr_reader :config
+
+ ##
+ # The CGI logger
+
+ attr_reader :logger
+
+ ##
+ # Creates a new CGI interface.
+ #
+ # The first argument in +args+ is a configuration hash which would update
+ # WEBrick::Config::HTTP.
+ #
+ # Any remaining arguments are stored in the <code>@options</code> instance
+ # variable for use by a subclass.
def initialize(*args)
if defined?(MOD_RUBY)
@@ -41,10 +75,17 @@ module WEBrick
@options = args
end
+ ##
+ # Reads +key+ from the configuration
+
def [](key)
@config[key]
end
+ ##
+ # Starts the CGI process with the given environment +env+ and standard
+ # input and output +stdin+ and +stdout+.
+
def start(env=ENV, stdin=$stdin, stdout=$stdout)
sock = WEBrick::CGI::Socket.new(@config, env, stdin, stdout)
req = HTTPRequest.new(@config)
@@ -108,6 +149,10 @@ module WEBrick
end
end
+ ##
+ # Services the request +req+ which will fill in the response +res+. See
+ # WEBrick::HTTPServlet::AbstractServlet#service for details.
+
def service(req, res)
method_name = "do_" + req.request_method.gsub(/-/, "_")
if respond_to?(method_name)
@@ -118,7 +163,10 @@ module WEBrick
end
end
- class Socket
+ ##
+ # Provides HTTP socket emulation from the CGI environment
+
+ class Socket # :nodoc:
include Enumerable
private