Raise ActiveResource::Redirection on 301,302 http code

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7297 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Tobias Lütke
2007-08-09 19:22:04 +00:00
parent d4bf5e9b34
commit 18a4cc1bd2
2 changed files with 11 additions and 4 deletions

View File

@@ -14,10 +14,15 @@ module ActiveResource
end
def to_s
"Failed with #{response.code}"
"Failed with #{response.code} #{response.message if response.respond_to?(:message)}"
end
end
# 3xx Redirection
class Redirection < ConnectionError # :nodoc:
def to_s; response['Location'] ? "#{super} => #{response['Location']}" : super; end
end
# 4xx Client Error
class ClientError < ConnectionError; end # :nodoc:
@@ -107,6 +112,8 @@ module ActiveResource
# Handles response and error codes from remote service.
def handle_response(response)
case response.code.to_i
when 301,302
raise(Redirection.new(response))
when 200...400
response
when 404

View File

@@ -66,12 +66,12 @@ class ConnectionTest < Test::Unit::TestCase
end
end
ResponseHeaderStub = Struct.new(:code, 'Allow')
ResponseHeaderStub = Struct.new(:code, :message, 'Allow')
def test_should_return_allowed_methods_for_method_no_allowed_exception
begin
handle_response ResponseHeaderStub.new(405, "GET, POST")
handle_response ResponseHeaderStub.new(405, "HTTP Failed...", "GET, POST")
rescue ActiveResource::MethodNotAllowed => e
assert_equal "Failed with 405", e.message
assert_equal "Failed with 405 HTTP Failed...", e.message
assert_equal [:get, :post], e.allowed_methods
end
end