Skip to content

Commit

Permalink
Extract status reasons into separate file
Browse files Browse the repository at this point in the history
This makes rubocop happy about class length. Probably this needs to be reported
to rubocop instead: Hash should be treated as a single line if it's a plain
Hash like this one.

On another hand, it's now possible to require reasons without Status class
definition, e.g. in reel.

/cc @sferik @tarcieri
  • Loading branch information
ixti committed Jun 12, 2014
1 parent 0924794 commit 74ae8cc
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 65 deletions.
67 changes: 2 additions & 65 deletions lib/http/response/status.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
require 'delegate'

require 'http/response/status/reasons'

module HTTP
class Response
class Status < ::Delegator
Expand Down Expand Up @@ -46,71 +48,6 @@ def symbolize(str)
end
end

# Code to Reason map
#
# @example Usage
#
# REASONS[400] # => "Bad Request"
# REASONS[414] # => "Request-URI Too Long"
# REASONS[418] # => "I'm a Teapot"
#
# @return [Hash<Fixnum => String>]
REASONS = {
100 => 'Continue',
101 => 'Switching Protocols',
102 => 'Processing',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
207 => 'Multi-Status',
226 => 'IM Used',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
306 => 'Reserved',
307 => 'Temporary Redirect',
308 => 'Permanent 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 Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
418 => "I'm a Teapot",
422 => 'Unprocessable Entity',
423 => 'Locked',
424 => 'Failed Dependency',
426 => 'Upgrade Required',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported',
506 => 'Variant Also Negotiates',
507 => 'Insufficient Storage',
510 => 'Not Extended'
}.each { |_, v| v.freeze }.freeze

# Code to Symbol map
#
# @example Usage
Expand Down
72 changes: 72 additions & 0 deletions lib/http/response/status/reasons.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
require 'delegate'

module HTTP
class Response
class Status < ::Delegator
# Code to Reason map
#
# @example Usage
#
# REASONS[400] # => "Bad Request"
# REASONS[414] # => "Request-URI Too Long"
# REASONS[418] # => "I'm a Teapot"
#
# @return [Hash<Fixnum => String>]
REASONS = {
100 => 'Continue',
101 => 'Switching Protocols',
102 => 'Processing',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
207 => 'Multi-Status',
226 => 'IM Used',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
306 => 'Reserved',
307 => 'Temporary Redirect',
308 => 'Permanent 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 Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
418 => "I'm a Teapot",
422 => 'Unprocessable Entity',
423 => 'Locked',
424 => 'Failed Dependency',
426 => 'Upgrade Required',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported',
506 => 'Variant Also Negotiates',
507 => 'Insufficient Storage',
510 => 'Not Extended'
}.each { |_, v| v.freeze }.freeze
end
end
end

5 comments on commit 74ae8cc

@ixti
Copy link
Member Author

@ixti ixti commented on 74ae8cc Jun 12, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/cc @sferik @tarcieri see commit message, please

@ixti
Copy link
Member Author

@ixti ixti commented on 74ae8cc Jun 12, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sferik @tarcieri There's another option: moving reasons hash into YAML file:

REASONS = YAML.load_file("./status/reasons.yml").each { |_, v| v.freeze }.freeze

PS I just don't think that moving constant declaration (in this case) out of main file is good for readability

@tarcieri
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is fine. I don't see any reason to use a YAML file.

@sferik
Copy link
Contributor

@sferik sferik commented on 74ae8cc Jun 12, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/cc @bbatsov

@ixti
Copy link
Member Author

@ixti ixti commented on 74ae8cc Jun 12, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.