Exception: Fauna::FaunaError
- Inherits:
-
RuntimeError
- Object
- RuntimeError
- Fauna::FaunaError
- Defined in:
- lib/fauna/errors.rb
Overview
Error returned by the FaunaDB server. For documentation of error types, see the docs.
Direct Known Subclasses
BadRequest, InternalError, MethodNotAllowed, NotFound, PermissionDenied, Unauthorized, UnavailableError
Instance Attribute Summary collapse
-
#errors ⇒ Object
readonly
List of ErrorData objects returned by the server.
-
#request_result ⇒ Object
readonly
RequestResult for the request that caused this error.
Class Method Summary collapse
-
.raise_for_status_code(request_result) ⇒ Object
Raises the associated error from a RequestResult based on the status code.
Instance Method Summary collapse
-
#initialize(request_result) ⇒ FaunaError
constructor
Creates a new error from a given RequestResult or Exception.
Constructor Details
#initialize(request_result) ⇒ FaunaError
Creates a new error from a given RequestResult or Exception.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/fauna/errors.rb', line 63 def initialize(request_result) = nil if request_result.is_a? RequestResult @request_result = request_result begin if request_result.response_content.nil? fail UnexpectedError.new('Invalid JSON.', request_result) end errors_raw = UnexpectedError.get_or_raise request_result, request_result.response_content, :errors @errors = catch :invalid_response do throw :invalid_response unless errors_raw.is_a? Array errors_raw.map { |error| ErrorData.from_hash(error) } end if @errors.nil? fail UnexpectedError.new('Error data has an unexpected format.', request_result) elsif @errors.empty? fail UnexpectedError.new('Error data returned was blank.', request_result) end = @errors.map do |error| msg = 'Error' msg += " at #{error.position}" unless error.position.nil? msg += ": #{error.code} - #{error.description}" unless error.failures.nil? msg += ' (' + error.failures.map do |failure| "Failure at #{failure.field}: #{failure.code} - #{failure.description}" end.join(' ') + ')' end msg end.join(' ') rescue UnexpectedError => e unless self.is_a?(UnavailableError) && [502, 503, 504].include?(request_result.status_code) raise e end = request_result.response_raw end elsif request_result.is_a? Exception = request_result.class.name unless request_result..nil? += ": #{request_result.}" end end super() end |
Instance Attribute Details
#errors ⇒ Object (readonly)
List of ErrorData objects returned by the server.
26 27 28 |
# File 'lib/fauna/errors.rb', line 26 def errors @errors end |
#request_result ⇒ Object (readonly)
RequestResult for the request that caused this error.
29 30 31 |
# File 'lib/fauna/errors.rb', line 29 def request_result @request_result end |
Class Method Details
.raise_for_status_code(request_result) ⇒ Object
Raises the associated error from a RequestResult based on the status code.
Returns nil
for 2xx status codes
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/fauna/errors.rb', line 35 def self.raise_for_status_code(request_result) case request_result.status_code when 200..299 when 400 fail BadRequest.new(request_result) when 401 fail Unauthorized.new(request_result) when 403 fail PermissionDenied.new(request_result) when 404 fail NotFound.new(request_result) when 405 fail MethodNotAllowed.new(request_result) when 500 fail InternalError.new(request_result) when 502 fail UnavailableError.new(request_result) when 503 fail UnavailableError.new(request_result) when 504 fail UnavailableError.new(request_result) else fail UnexpectedError.new('Unexpected status code.', request_result) end end |