class SolveBio::SolveError

Constants

DEFAULT_MESSAGE

Attributes

field_errors[R]
json_body[R]
message[R]
status_code[R]

Public Class Methods

new(response=nil, message=nil) click to toggle source
# File lib/solvebio/errors.rb, line 13
def initialize(response=nil, message=nil)
    @json_body = nil
    @status_code = nil
    @message = message or DEFAULT_MESSAGE
    @field_errors = []

    if response
        @status_code = response.code.to_i
        begin
            @json_body = JSON.parse(response.body)
        rescue
            SolveBio.logger.debug(
                "API Response (%d): No content." % @status_code)
        else
            SolveBio.logger.debug(
                "API Response (#{@status_code}): #{@json_body}")

            if [400, 401, 403, 404].member?(@status_code)
                @message = 'Bad request.'

                if @json_body.member?('detail')
                    @message = @json_body['detail']
                end

                if @json_body.member?('non_field_errors')
                    @message = @json_body['non_field_errors'].join(', ')
                end

                @json_body.each do |k, v|
                    unless ['detail', 'non_field_errors'].member?(k)
                        v = v.join(', ') if v.kind_of?(Array)
                        @field_errors << ('%s (%s)' % [k, v])
                    end
                end

                unless @field_errors.empty?
                    @message += (' The following fields were missing ' +
                        'or invalid: %s' %
                                     @field_errors.join(', '))
                end
            end
        end
    end

    self
end

Public Instance Methods

to_s() click to toggle source
# File lib/solvebio/errors.rb, line 60
def to_s
    @message
end