зеркало из https://github.com/github/ruby.git
127 строки
3.3 KiB
Ruby
127 строки
3.3 KiB
Ruby
|
#
|
||
|
# 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
|