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