From 54bc4d2e338a543d6029bb892354d4f5deefb590 Mon Sep 17 00:00:00 2001 From: Elad Meidar Date: Sun, 9 Aug 2009 15:46:10 -0400 Subject: [PATCH] [PATCH] LH2316 - ActiveResource::ResourceGone and tests for ActiveResource for master --- activeresource/lib/active_resource/base.rb | 5 +++- activeresource/lib/active_resource/connection.rb | 2 + activeresource/lib/active_resource/exceptions.rb | 3 ++ activeresource/test/base_test.rb | 24 ++++++++++++++++++++++ activeresource/test/connection_test.rb | 3 ++ 5 files changed, 36 insertions(+), 1 deletions(-) diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index 9db3588..a8a4814 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -149,6 +149,7 @@ module ActiveResource # * 404 - ActiveResource::ResourceNotFound # * 405 - ActiveResource::MethodNotAllowed # * 409 - ActiveResource::ResourceConflict + # * 410 - ActiveResource::ResourceGone # * 422 - ActiveResource::ResourceInvalid (rescued by save as validation errors) # * 401..499 - ActiveResource::ClientError # * 500..599 - ActiveResource::ServerError @@ -161,6 +162,8 @@ module ActiveResource # ryan = Person.find(my_id) # rescue ActiveResource::ResourceNotFound # redirect_to :action => 'not_found' + # rescue ActiveResource::ResourceGone + # redirect_to :action => 'resource_removed' # rescue ActiveResource::ResourceConflict, ActiveResource::ResourceInvalid # redirect_to :action => 'new' # end @@ -585,7 +588,7 @@ module ActiveResource response.code.to_i == 200 end # id && !find_single(id, options).nil? - rescue ActiveResource::ResourceNotFound + rescue ActiveResource::ResourceNotFound, ActiveResource::ResourceGone false end diff --git a/activeresource/lib/active_resource/connection.rb b/activeresource/lib/active_resource/connection.rb index ef57c1f..58d0b2d 100644 --- a/activeresource/lib/active_resource/connection.rb +++ b/activeresource/lib/active_resource/connection.rb @@ -123,6 +123,8 @@ module ActiveResource raise(MethodNotAllowed.new(response)) when 409 raise(ResourceConflict.new(response)) + when 410 + raise(ResouceGone.new(response)) when 422 raise(ResourceInvalid.new(response)) when 401...500 diff --git a/activeresource/lib/active_resource/exceptions.rb b/activeresource/lib/active_resource/exceptions.rb index 5e4b1d4..f438f97 100644 --- a/activeresource/lib/active_resource/exceptions.rb +++ b/activeresource/lib/active_resource/exceptions.rb @@ -43,6 +43,9 @@ module ActiveResource # 409 Conflict class ResourceConflict < ClientError; end # :nodoc: + # 410 Conflict + class ResourceGone < ClientError; end # :nodoc + # 5xx Server Error class ServerError < ConnectionError; end # :nodoc: diff --git a/activeresource/test/base_test.rb b/activeresource/test/base_test.rb index e68d562..5241c9f 100644 --- a/activeresource/test/base_test.rb +++ b/activeresource/test/base_test.rb @@ -848,6 +848,15 @@ class BaseTest < Test::Unit::TestCase assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :params => { :person_id => 1 }) } end + def test_destroy_with_410_gone + assert Person.find(1).destroy + ActiveResource::HttpMock.respond_to do |mock| + mock.get "/people/1.xml", {}, nil, 410 + end + assert_raise(ActiveResource::ResourceGone) { Person.find(1).destroy } + end + end + def test_delete assert Person.delete(1) ActiveResource::HttpMock.respond_to do |mock| @@ -856,6 +865,14 @@ class BaseTest < Test::Unit::TestCase assert_raise(ActiveResource::ResourceNotFound) { Person.find(1) } end + def test_delete_with_410_gone + assert Person.delete(1) + ActiveResource::HttpMock.respond_to do |mock| + mock.get "/people/1.xml", {}, nil, 410 + end + assert_raise(ActiveResource::ResourceGone) { Person.find(1) } + end + def test_delete_with_custom_prefix assert StreetAddress.delete(1, :person_id => 1) ActiveResource::HttpMock.respond_to do |mock| @@ -915,6 +932,13 @@ class BaseTest < Test::Unit::TestCase end end + def test_exists_with_410_gone + ActiveResource::HttpMock.respond_to do |mock| + mock.head "/people/1.xml", {}, nil, 410 + end + assert !Person.exists?(1) + end + def test_to_xml matz = Person.find(1) xml = matz.encode diff --git a/activeresource/test/connection_test.rb b/activeresource/test/connection_test.rb index 12e8058..3773727 100644 --- a/activeresource/test/connection_test.rb +++ b/activeresource/test/connection_test.rb @@ -56,6 +56,9 @@ class ConnectionTest < Test::Unit::TestCase # 409 is an optimistic locking error assert_response_raises ActiveResource::ResourceConflict, 409 + # 410 is a removed resouce + assert_response_raises ActiveResource::ResourceGone, 410 + # 422 is a validation error assert_response_raises ActiveResource::ResourceInvalid, 422 -- 1.6.0.2