1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Treat 303 See Other as a redirect response, too

This commit is contained in:
Jeremy Kemper 2011-10-11 21:01:11 -07:00
parent 027ecd3afb
commit b8bb5f44c8
4 changed files with 29 additions and 6 deletions

View file

@ -1,3 +1,16 @@
*Rails 3.1.2 (unreleased)*
* Redirect responses: 303 See Other and 307 Temporary Redirect now behave like
301 Moved Permanently and 302 Found. GH #3302.
[Jim Herz]
*Rails 3.1.1 (October 7, 2011)*
* No changes.
*Rails 3.1.0 (August 30, 2011)*
* The default format has been changed to JSON for all requests. If you want to continue to use XML you will need to set `self.format = :xml` in the class. eg.

View file

@ -170,8 +170,8 @@ module ActiveResource
# <tt>404</tt> is just one of the HTTP error response codes that Active Resource will handle with its own exception. The
# following HTTP response codes will also result in these exceptions:
#
# * 200..399 - Valid response, no exception (other than 301, 302 and 307)
# * 301, 302, 307 - ActiveResource::Redirection
# * 200..399 - Valid response. No exceptions, other than these redirects:
# * 301, 302, 303, 307 - ActiveResource::Redirection
# * 400 - ActiveResource::BadRequest
# * 401 - ActiveResource::UnauthorizedAccess
# * 403 - ActiveResource::ForbiddenAccess

View file

@ -122,7 +122,7 @@ module ActiveResource
# Handles response and error codes from the remote service.
def handle_response(response)
case response.code.to_i
when 301,302,307
when 301, 302, 303, 307
raise(Redirection.new(response))
when 200...400
response

View file

@ -2,6 +2,7 @@ require 'abstract_unit'
class ConnectionTest < Test::Unit::TestCase
ResponseCodeStub = Struct.new(:code)
RedirectResponseStub = Struct.new(:code, :Location)
def setup
@conn = ActiveResource::Connection.new('http://localhost')
@ -39,13 +40,16 @@ class ConnectionTest < Test::Unit::TestCase
end
# 301 is moved permanently (redirect)
assert_response_raises ActiveResource::Redirection, 301
assert_redirect_raises 301
# 302 is found (redirect)
assert_response_raises ActiveResource::Redirection, 302
assert_redirect_raises 302
# 303 is see other (redirect)
assert_redirect_raises 303
# 307 is temporary redirect
assert_response_raises ActiveResource::Redirection, 307
assert_redirect_raises 307
# 400 is a bad request (e.g. malformed URI or missing request parameter)
assert_response_raises ActiveResource::BadRequest, 400
@ -256,6 +260,12 @@ class ConnectionTest < Test::Unit::TestCase
end
end
def assert_redirect_raises(code)
assert_raise(ActiveResource::Redirection, "Expected response code #{code} to raise ActiveResource::Redirection") do
handle_response RedirectResponseStub.new(code, 'http://example.com/')
end
end
def handle_response(response)
@conn.__send__(:handle_response, response)
end