Skip to content

Commit f2a20e2

Browse files
authored
Merge pull request #322 from COzero/retain-error-context
Retain context from Faraday errors
2 parents 0f9da74 + 710cbb9 commit f2a20e2

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

lib/json_api_client/errors.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ module JsonApiClient
22
module Errors
33
class ApiError < StandardError
44
attr_reader :env
5-
def initialize(env)
5+
def initialize(env, msg = nil)
6+
super msg
67
@env = env
78
end
89
end
@@ -20,14 +21,14 @@ class ConnectionError < ApiError
2021
end
2122

2223
class ServerError < ApiError
23-
def message
24-
"Internal server error"
24+
def initialize(env, msg = 'Internal server error')
25+
super env, msg
2526
end
2627
end
2728

2829
class Conflict < ServerError
29-
def message
30-
"Resource already exists"
30+
def initialize(env, msg = 'Resource already exists')
31+
super env, msg
3132
end
3233
end
3334

@@ -51,6 +52,5 @@ def message
5152
"Unexpected response status: #{code} from: #{uri.to_s}"
5253
end
5354
end
54-
5555
end
5656
end

lib/json_api_client/middleware/status.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ def call(environment)
1111
handle_status(code, env)
1212
end
1313
end
14-
rescue Faraday::ConnectionFailed, Faraday::TimeoutError
15-
raise Errors::ConnectionError, environment
14+
rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
15+
raise Errors::ConnectionError.new environment, e.to_s
1616
end
1717

1818
protected

test/unit/errors_test.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ class ErrorsTest < MiniTest::Test
44

55
def test_connection_errors
66
stub_request(:get, "http://example.com/users")
7-
.to_raise(Faraday::ConnectionFailed)
7+
.to_raise(Faraday::ConnectionFailed.new("specific message"))
88

9-
assert_raises JsonApiClient::Errors::ConnectionError do
9+
err = assert_raises JsonApiClient::Errors::ConnectionError do
1010
User.all
1111
end
12+
13+
assert_match /specific message/, err.message
1214
end
1315

1416
def test_timeout_errors

0 commit comments

Comments
 (0)