Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions lib/faraday/raise_http_exception.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,21 @@ class RaiseHTTPException < Faraday::Middleware
def call(env)
@app.call(env).on_complete do |response|
response_hash = JSON.parse(response.body)
msg = "#{response[:status]} #{response_hash['message']}"
msg = "#{response[:status]} #{response_hash['code']}: #{response_hash['message']}"

case response[:status]
when 400 ; raise Postmates::BadRequest, msg
when 401 ; raise Postmates::Unauthorized, msg
when 402 ; raise Postmates::CustomerSuspended, msg
when 403 ; raise Postmates::Forbidden, msg
when 404 ; raise Postmates::NotFound, msg
when 500 ; raise Postmates::InternalServerError, msg
when 503 ; raise Postmates::ServiceUnavailable, msg
end

if response[:status] >= 300
raise Postmates::Error, msg
end
end
end

Expand All @@ -25,4 +30,4 @@ def initialize(app)
@parser = nil
end
end
end
end
3 changes: 2 additions & 1 deletion lib/postmates/error.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ module Postmates
class Error < StandardError; end # custom Postmates error class
class BadRequest < Error; end # 400
class Unauthorized < Error; end # 401
class CustomerSuspended < Error; end # 402
class Forbidden < Error; end # 403
class NotFound < Error; end # 404
class InternalServerError < Error; end # 500
class ServiceUnavailable < Error; end # 503
end
end
26 changes: 25 additions & 1 deletion spec/error_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,18 @@
end
end

describe 'when customer account is suspended' do
before do
stub_get(path_to('deliveries'),
response_code: 402, returns: 'service_unavailable.json')
end

it 'raises Postmates::CustomerSuspended' do
expect { client.list }
.to raise_error Postmates::CustomerSuspended
end
end

describe 'Forbidden' do
let(:bad_client) { Postmates.new }
before do
Expand Down Expand Up @@ -78,5 +90,17 @@
.to raise_error Postmates::ServiceUnavailable
end
end

describe 'with an unknown error' do
before do
stub_get(path_to('deliveries'),
response_code: 504, returns: 'unknown.json')
end

it 'raises Postmates::Error' do
expect { client.list }
.to raise_error Postmates::Error
end
end
end
end
end
5 changes: 5 additions & 0 deletions spec/fixtures/suspended.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"kind": "error",
"code": "customer_suspended",
"message": "engineering@yourcompany.com"
}
5 changes: 5 additions & 0 deletions spec/fixtures/unknown.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"kind": "error",
"code": "unknown",
"message": "something blew up"
}