From 5e768c60117f6514915c79b4df2fbc179535c44d Mon Sep 17 00:00:00 2001 From: Lucas Moreno Silva Date: Thu, 16 May 2019 11:25:50 +0200 Subject: [PATCH 1/2] Add Faraday::ConflictError class --- lib/faraday/error.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/faraday/error.rb b/lib/faraday/error.rb index ea487fea9..fd58354db 100644 --- a/lib/faraday/error.rb +++ b/lib/faraday/error.rb @@ -61,6 +61,10 @@ class ResourceNotFound < ClientError class ProxyAuthError < ClientError end + # Raised by Faraday::Response::RaiseError in case of a 409 response. + class ConflictError < ClientError + end + # Raised by Faraday::Response::RaiseError in case of a 422 response. class UnprocessableEntityError < ClientError end From beaf4de0e2364aabc1f3cdea057ea53754bd9fa7 Mon Sep 17 00:00:00 2001 From: Lucas Moreno Silva Date: Thu, 16 May 2019 11:25:59 +0200 Subject: [PATCH 2/2] Raise ConflictError when a 409 reponse is received --- lib/faraday/response/raise_error.rb | 2 ++ spec/faraday/response/raise_error_spec.rb | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/lib/faraday/response/raise_error.rb b/lib/faraday/response/raise_error.rb index cb568607c..8a380fd40 100644 --- a/lib/faraday/response/raise_error.rb +++ b/lib/faraday/response/raise_error.rb @@ -24,6 +24,8 @@ def on_complete(env) # mimic the behavior that we get with proxy requests with HTTPS msg = %(407 "Proxy Authentication Required") raise Faraday::ProxyAuthError.new(msg, response_values(env)) + when 409 + raise Faraday::ConflictError, response_values(env) when 422 raise Faraday::UnprocessableEntityError, response_values(env) when ClientErrorStatuses diff --git a/spec/faraday/response/raise_error_spec.rb b/spec/faraday/response/raise_error_spec.rb index 8f0c53a02..c5f0c0c66 100644 --- a/spec/faraday/response/raise_error_spec.rb +++ b/spec/faraday/response/raise_error_spec.rb @@ -11,6 +11,7 @@ stub.get('forbidden') { [403, { 'X-Reason' => 'because' }, 'keep looking'] } stub.get('not-found') { [404, { 'X-Reason' => 'because' }, 'keep looking'] } stub.get('proxy-error') { [407, { 'X-Reason' => 'because' }, 'keep looking'] } + stub.get('conflict') { [409, { 'X-Reason' => 'because' }, 'keep looking'] } stub.get('unprocessable-entity') { [422, { 'X-Reason' => 'because' }, 'keep looking'] } stub.get('4xx') { [499, { 'X-Reason' => 'because' }, 'keep looking'] } stub.get('server-error') { [500, { 'X-Error' => 'bailout' }, 'fail'] } @@ -57,6 +58,13 @@ end end + it 'raises Faraday::ConflictError for 409 responses' do + expect { conn.get('conflict') }.to raise_error(Faraday::ConflictError) do |ex| + expect(ex.message).to eq('the server responded with status 409') + expect(ex.response[:headers]['X-Reason']).to eq('because') + end + end + it 'raises Faraday::UnprocessableEntityError for 422 responses' do expect { conn.get('unprocessable-entity') }.to raise_error(Faraday::UnprocessableEntityError) do |ex| expect(ex.message).to eq('the server responded with status 422')