diff --git a/lib/active_resource/base.rb b/lib/active_resource/base.rb index c36797f16e..f14a91a986 100644 --- a/lib/active_resource/base.rb +++ b/lib/active_resource/base.rb @@ -204,6 +204,7 @@ module ActiveResource # * 410 - ActiveResource::ResourceGone # * 412 - ActiveResource::PreconditionFailed # * 422 - ActiveResource::ResourceInvalid (rescued by save as validation errors) + # * 429 - ActiveResource::TooManyRequests # * 401..499 - ActiveResource::ClientError # * 500..599 - ActiveResource::ServerError # * Other - ActiveResource::ConnectionError diff --git a/lib/active_resource/connection.rb b/lib/active_resource/connection.rb index 63fcaa80b9..0e86592f24 100644 --- a/lib/active_resource/connection.rb +++ b/lib/active_resource/connection.rb @@ -155,6 +155,8 @@ def handle_response(response) raise(PreconditionFailed.new(response)) when 422 raise(ResourceInvalid.new(response)) + when 429 + raise(TooManyRequests.new(response)) when 401...500 raise(ClientError.new(response)) when 500...600 diff --git a/lib/active_resource/exceptions.rb b/lib/active_resource/exceptions.rb index 141c4ed37f..07cb536d98 100644 --- a/lib/active_resource/exceptions.rb +++ b/lib/active_resource/exceptions.rb @@ -75,6 +75,10 @@ class ResourceGone < ClientError # :nodoc: class PreconditionFailed < ClientError # :nodoc: end + # 429 Too Many Requests + class TooManyRequests < ClientError # :nodoc: + end + # 5xx Server Error class ServerError < ConnectionError # :nodoc: end diff --git a/test/cases/connection_test.rb b/test/cases/connection_test.rb index e7c3027c82..96ebaa7b09 100644 --- a/test/cases/connection_test.rb +++ b/test/cases/connection_test.rb @@ -95,6 +95,9 @@ def test_handle_response # 422 is a validation error assert_response_raises ActiveResource::ResourceInvalid, 422 + # 429 is too many requests + assert_response_raises ActiveResource::TooManyRequests, 429 + # 4xx are client errors. [402, 499].each do |code| assert_response_raises ActiveResource::ClientError, code