summaryrefslogtreecommitdiff
path: root/trunk/lib/webrick/httpstatus.rb
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-25 15:02:05 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-25 15:02:05 +0000
commit0dc342de848a642ecce8db697b8fecd83a63e117 (patch)
tree2b7ed4724aff1f86073e4740134bda9c4aac1a39 /trunk/lib/webrick/httpstatus.rb
parentef70cf7138ab8034b5b806f466e4b484b24f0f88 (diff)
added tag v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/lib/webrick/httpstatus.rb')
-rw-r--r--trunk/lib/webrick/httpstatus.rb126
1 files changed, 126 insertions, 0 deletions
diff --git a/trunk/lib/webrick/httpstatus.rb b/trunk/lib/webrick/httpstatus.rb
new file mode 100644
index 0000000000..a4b42f5a90
--- /dev/null
+++ b/trunk/lib/webrick/httpstatus.rb
@@ -0,0 +1,126 @@
+#
+# httpstatus.rb -- HTTPStatus Class
+#
+# Author: IPR -- Internet Programming with Ruby -- writers
+# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
+# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
+# reserved.
+#
+# $IPR: httpstatus.rb,v 1.11 2003/03/24 20:18:55 gotoyuzo Exp $
+
+module WEBrick
+
+ module HTTPStatus
+
+ class Status < StandardError; end
+ class Info < Status; end
+ class Success < Status; end
+ class Redirect < Status; end
+ class Error < Status; end
+ class ClientError < Error; end
+ class ServerError < Error; end
+
+ class EOFError < StandardError; end
+
+ StatusMessage = {
+ 100 => 'Continue',
+ 101 => 'Switching Protocols',
+ 200 => 'OK',
+ 201 => 'Created',
+ 202 => 'Accepted',
+ 203 => 'Non-Authoritative Information',
+ 204 => 'No Content',
+ 205 => 'Reset Content',
+ 206 => 'Partial Content',
+ 300 => 'Multiple Choices',
+ 301 => 'Moved Permanently',
+ 302 => 'Found',
+ 303 => 'See Other',
+ 304 => 'Not Modified',
+ 305 => 'Use Proxy',
+ 307 => 'Temporary Redirect',
+ 400 => 'Bad Request',
+ 401 => 'Unauthorized',
+ 402 => 'Payment Required',
+ 403 => 'Forbidden',
+ 404 => 'Not Found',
+ 405 => 'Method Not Allowed',
+ 406 => 'Not Acceptable',
+ 407 => 'Proxy Authentication Required',
+ 408 => 'Request Timeout',
+ 409 => 'Conflict',
+ 410 => 'Gone',
+ 411 => 'Length Required',
+ 412 => 'Precondition Failed',
+ 413 => 'Request Entity Too Large',
+ 414 => 'Request-URI Too Large',
+ 415 => 'Unsupported Media Type',
+ 416 => 'Request Range Not Satisfiable',
+ 417 => 'Expectation Failed',
+ 500 => 'Internal Server Error',
+ 501 => 'Not Implemented',
+ 502 => 'Bad Gateway',
+ 503 => 'Service Unavailable',
+ 504 => 'Gateway Timeout',
+ 505 => 'HTTP Version Not Supported'
+ }
+
+ CodeToError = {}
+
+ StatusMessage.each{|code, message|
+ var_name = message.gsub(/[ \-]/,'_').upcase
+ err_name = message.gsub(/[ \-]/,'')
+
+ case code
+ when 100...200; parent = Info
+ when 200...300; parent = Success
+ when 300...400; parent = Redirect
+ when 400...500; parent = ClientError
+ when 500...600; parent = ServerError
+ end
+
+ eval %-
+ RC_#{var_name} = #{code}
+ class #{err_name} < #{parent}
+ def self.code() RC_#{var_name} end
+ def self.reason_phrase() StatusMessage[code] end
+ def code() self::class::code end
+ def reason_phrase() self::class::reason_phrase end
+ alias to_i code
+ end
+ -
+
+ CodeToError[code] = const_get(err_name)
+ }
+
+ def reason_phrase(code)
+ StatusMessage[code.to_i]
+ end
+ def info?(code)
+ code.to_i >= 100 and code.to_i < 200
+ end
+ def success?(code)
+ code.to_i >= 200 and code.to_i < 300
+ end
+ def redirect?(code)
+ code.to_i >= 300 and code.to_i < 400
+ end
+ def error?(code)
+ code.to_i >= 400 and code.to_i < 600
+ end
+ def client_error?(code)
+ code.to_i >= 400 and code.to_i < 500
+ end
+ def server_error?(code)
+ code.to_i >= 500 and code.to_i < 600
+ end
+
+ def self.[](code)
+ CodeToError[code]
+ end
+
+ module_function :reason_phrase
+ module_function :info?, :success?, :redirect?, :error?
+ module_function :client_error?, :server_error?
+ end
+end