diff --git a/lib/request_errors.rb b/lib/request_errors.rb index 5f6e6f0..ed6cad0 100644 --- a/lib/request_errors.rb +++ b/lib/request_errors.rb @@ -7,6 +7,9 @@ module RestClient # Authorization is required to access the resource specified. class Unauthorized < RuntimeError; end + # No resource was found at the given URL. + class ResourceNotFound < RuntimeError; end + # The server broke the connection prior to the request completing. class ServerBrokeConnection < RuntimeError; end @@ -35,7 +38,6 @@ module RestClient def message(default="Unknown error, HTTP status code #{http_code}") return default unless @response - return "Resource not found" if http_code == 404 parse_error_xml rescue default end diff --git a/lib/rest_client.rb b/lib/rest_client.rb index ac7460e..775da18 100644 --- a/lib/rest_client.rb +++ b/lib/rest_client.rb @@ -124,6 +124,8 @@ module RestClient raise Redirect, res.header['Location'] elsif res.code == "401" raise Unauthorized + elsif res.code == "404" + raise ResourceNotFound else raise RequestFailed, res end diff --git a/spec/rest_client_spec.rb b/spec/rest_client_spec.rb index 79e825f..c41ba4d 100644 --- a/spec/rest_client_spec.rb +++ b/spec/rest_client_spec.rb @@ -189,6 +189,11 @@ describe RestClient do lambda { @request.process_result(res) }.should raise_error(RestClient::Unauthorized) end + it "raises ResourceNotFound when the response is 404" do + res = mock('response', :code => '404') + lambda { @request.process_result(res) }.should raise_error(RestClient::ResourceNotFound) + end + it "raises RequestFailed otherwise" do res = mock('response', :code => '500') lambda { @request.process_result(res) }.should raise_error(RestClient::RequestFailed)