Skip to content
Merged
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
3 changes: 3 additions & 0 deletions lib/intercom/errors.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ class ServerError < IntercomError; end
# Raised when we have bad gateway errors.
class BadGatewayError < IntercomError; end

# Raised when we have gateway timeout errors.
class GatewayTimeoutError < IntercomError; end

# Raised when we experience a socket read timeout
class ServiceUnavailableError < IntercomError; end

Expand Down
2 changes: 2 additions & 0 deletions lib/intercom/request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ def execute(target_base_url=nil, username:, secret: nil, read_timeout: 90, open_
raise Intercom::BadGatewayError.new('Bad Gateway Error')
elsif code == 503
raise Intercom::ServiceUnavailableError.new('Service Unavailable')
elsif code == 504
raise Intercom::GatewayTimeoutError.new('Gateway Timeout')
end
end

Expand Down
9 changes: 9 additions & 0 deletions spec/unit/intercom/request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,15 @@ def execute!

expect { execute! }.must_raise(Intercom::RateLimitExceeded)
end

it 'raises a GatewayTimeoutError error when the response code is 504' do
stub_request(:any, uri).to_return(
status: 504,
body: '<html> <head><title>504 Gateway Time-out</title></head> <body bgcolor="white"> <center><h1>504 Gateway Time-out</h1></center> </body> </html>'
)

expect { execute! }.must_raise(Intercom::GatewayTimeoutError)
end
end

describe "application error handling" do
Expand Down