diff --git a/activeresource/CHANGELOG b/activeresource/CHANGELOG
index 1f30c14f6f..70bc5675e2 100644
--- a/activeresource/CHANGELOG
+++ b/activeresource/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Interpret 422 Unprocessable Entity as ResourceInvalid. #7097 [dkubb]
+
* Mega documentation patches. #7025, #7069 [rwdaigle]
* Base.exists?(id, options) and Base#exists? check whether the resource is found. #6970 [rwdaigle]
diff --git a/activeresource/README b/activeresource/README
index a657e3a471..702ab7efed 100644
--- a/activeresource/README
+++ b/activeresource/README
@@ -118,7 +118,7 @@ as the id of the ARes object.
# when save is called on a new Person object. An empty response is
# is expected with a 'Location' header value:
#
- # Response (200): Location: http://api.people.com:3000/people/2
+ # Response (201): Location: http://api.people.com:3000/people/2
#
ryan = Person.new(:first => 'Ryan')
ryan.new? #=> true
@@ -184,7 +184,7 @@ exception.
==== Validation errors
Creating and updating resources can lead to validation errors - i.e. 'First name cannot be empty' etc...
-These types of errors are denoted in the response by a response code of 400 and the xml representation
+These types of errors are denoted in the response by a response code of 422 and the xml representation
of the validation errors. The save operation will then fail (with a 'false' return value) and the
validation errors can be accessed on the resource in question.
@@ -194,7 +194,7 @@ validation errors can be accessed on the resource in question.
#
# is requested with invalid values, the expected response is:
#
- # Response (400):
+ # Response (422):
# First cannot be empty
#
ryan = Person.find(1)
@@ -210,13 +210,13 @@ If the underlying Http request for an ARes operation results in an error respons
exception will be raised. The following Http response codes will result in these exceptions:
200 - 399: Valid response, no exception
- 400: ActiveResource::ResourceInvalid (automatically caught by ARes validation)
404: ActiveResource::ResourceNotFound
409: ActiveResource::ResourceConflict
+ 422: ActiveResource::ResourceInvalid (rescued by save as validation errors)
401 - 499: ActiveResource::ClientError
500 - 599: ActiveResource::ServerError
-
+
=== Authentication
Many REST apis will require username/password authentication, usually in the form of
@@ -227,4 +227,4 @@ in the Url of the ARes site:
self.site = "http://ryan:password@api.people.com:3000/"
end
-For obvious reasons it is best if such services are available over https.
\ No newline at end of file
+For obvious reasons it is best if such services are available over https.
diff --git a/activeresource/lib/active_resource/connection.rb b/activeresource/lib/active_resource/connection.rb
index 528a7cc678..8e25ec5eb6 100644
--- a/activeresource/lib/active_resource/connection.rb
+++ b/activeresource/lib/active_resource/connection.rb
@@ -90,10 +90,10 @@ module ActiveResource
response
when 404
raise(ResourceNotFound.new(response))
- when 400
- raise(ResourceInvalid.new(response))
when 409
raise(ResourceConflict.new(response))
+ when 422
+ raise(ResourceInvalid.new(response))
when 401...500
raise(ClientError.new(response))
when 500...600
diff --git a/activeresource/test/base_errors_test.rb b/activeresource/test/base_errors_test.rb
index c6b840ebe1..3527eb2353 100644
--- a/activeresource/test/base_errors_test.rb
+++ b/activeresource/test/base_errors_test.rb
@@ -4,7 +4,7 @@ require "fixtures/person"
class BaseErrorsTest < Test::Unit::TestCase
def setup
ActiveResource::HttpMock.respond_to do |mock|
- mock.post "/people.xml", {}, "Age can't be blankName can't be blankName must start with a letterPerson quota full for today.", 400
+ mock.post "/people.xml", {}, "Age can't be blankName can't be blankName must start with a letterPerson quota full for today.", 422
end
@person = Person.new(:name => '', :age => '')
assert_equal @person.save, false
diff --git a/activeresource/test/connection_test.rb b/activeresource/test/connection_test.rb
index 99f0b8de89..8fcbf089de 100644
--- a/activeresource/test/connection_test.rb
+++ b/activeresource/test/connection_test.rb
@@ -36,12 +36,12 @@ class ConnectionTest < Test::Unit::TestCase
# 404 is a missing resource.
assert_response_raises ActiveResource::ResourceNotFound, 404
- # 400 is a validation error
- assert_response_raises ActiveResource::ResourceInvalid, 400
-
# 409 is an optimistic locking error
assert_response_raises ActiveResource::ResourceConflict, 409
+ # 422 is a validation error
+ assert_response_raises ActiveResource::ResourceInvalid, 422
+
# 4xx are client errors.
[401, 499].each do |code|
assert_response_raises ActiveResource::ClientError, code