diff --git a/lib/json_api_client/errors.rb b/lib/json_api_client/errors.rb index 3eb703be..5d8d6aa6 100644 --- a/lib/json_api_client/errors.rb +++ b/lib/json_api_client/errors.rb @@ -2,7 +2,8 @@ module JsonApiClient module Errors class ApiError < StandardError attr_reader :env - def initialize(env) + def initialize(env, msg = nil) + super msg @env = env end end @@ -20,14 +21,14 @@ class ConnectionError < ApiError end class ServerError < ApiError - def message - "Internal server error" + def initialize(env, msg = 'Internal server error') + super env, msg end end class Conflict < ServerError - def message - "Resource already exists" + def initialize(env, msg = 'Resource already exists') + super env, msg end end @@ -51,6 +52,5 @@ def message "Unexpected response status: #{code} from: #{uri.to_s}" end end - end end diff --git a/lib/json_api_client/middleware/status.rb b/lib/json_api_client/middleware/status.rb index 9f5909a9..ad31de29 100644 --- a/lib/json_api_client/middleware/status.rb +++ b/lib/json_api_client/middleware/status.rb @@ -11,8 +11,8 @@ def call(environment) handle_status(code, env) end end - rescue Faraday::ConnectionFailed, Faraday::TimeoutError - raise Errors::ConnectionError, environment + rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e + raise Errors::ConnectionError.new environment, e.to_s end protected diff --git a/test/unit/errors_test.rb b/test/unit/errors_test.rb index 3e8f2c32..d11e2ff5 100644 --- a/test/unit/errors_test.rb +++ b/test/unit/errors_test.rb @@ -4,11 +4,13 @@ class ErrorsTest < MiniTest::Test def test_connection_errors stub_request(:get, "http://example.com/users") - .to_raise(Faraday::ConnectionFailed) + .to_raise(Faraday::ConnectionFailed.new("specific message")) - assert_raises JsonApiClient::Errors::ConnectionError do + err = assert_raises JsonApiClient::Errors::ConnectionError do User.all end + + assert_match /specific message/, err.message end def test_timeout_errors