diff --git a/lib/diplomat/query.rb b/lib/diplomat/query.rb index 3cac851..3115905 100644 --- a/lib/diplomat/query.rb +++ b/lib/diplomat/query.rb @@ -32,7 +32,9 @@ def create(definition, options = {}) custom_params = options[:dc] ? use_named_parameter('dc', options[:dc]) : nil @raw = send_post_request(@conn, ['/v1/query'], options, definition, custom_params) parse_body - rescue Faraday::ClientError + rescue Faraday::TimeoutError => e + raise e + rescue *faraday_error_classes raise Diplomat::QueryAlreadyExists end diff --git a/lib/diplomat/rest_client.rb b/lib/diplomat/rest_client.rb index c8a30aa..07975f0 100644 --- a/lib/diplomat/rest_client.rb +++ b/lib/diplomat/rest_client.rb @@ -256,7 +256,9 @@ def send_get_request(connection, url, options, custom_params = nil) rest_options[:headers].map { |k, v| req.headers[k.to_sym] = v } unless rest_options[:headers].nil? req.options.timeout = options[:timeout] if options[:timeout] end - rescue Faraday::ClientError, Faraday::ServerError => e + rescue Faraday::TimeoutError => e + raise e + rescue *faraday_error_classes => e resp = e.response if resp raise Diplomat::AclNotFound, e if resp[:status] == 403 && resp[:body] == 'ACL not found' @@ -304,6 +306,14 @@ def send_delete_request(connection, url, options, custom_params = nil) end end + # This method returns the correct Exception Classes depending on the Faraday version being installed + # see https://github.com/WeAreFarmGeek/diplomat/issues/227 + # + # @return [Array] Faraday error classes that should be caught + def faraday_error_classes + Faraday.const_defined?(:ServerError) ? [Faraday::ClientError, Faraday::ServerError] : [Faraday::ClientError] + end + # Mapping for valid key/value store transaction verbs and required parameters # # @return [Hash] valid key/store transaction verbs and required parameters