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