Sha256: 3b3278fff0bd26dc5bf07a704405c72cc800249746d415412e20b833079a92a0

Contents?: true

Size: 1.07 KB

Versions: 3

Compression:

Stored size: 1.07 KB

Contents

# frozen_string_literal: true

# Copyright (c) 2019 Valencia Management Group
# All rights reserved.

module TopsConnect
  class ApiError < ::RuntimeError
    def initialize(response)
      @response = response
    end

    def to_s
      format(
        '%<code>s: %<message>s (%<uri>s)',
        code: @response.code,
        message: self.class.error_message(@response.parsed_response),
        uri: @response.request.last_uri.to_s
      )
    end

    def self.error_message(parsed_response)
      case parsed_response
      when String
        parsed_response
      when Hash
        parsed_response.dig('Message')
      else
        ''
      end
    end
  end

  # The client submitted invalid information.
  class ClientError < ApiError
  end

  # A request was made for a key/query that doesn't exist.
  class NotFoundError < ClientError
  end

  # Something happened but we don't know what and it's probably not our fault.
  class InternalError < ApiError
  end

  # The API took too long to respond, but everything might be fine later.
  class TimeoutError < InternalError
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
tops_connect-0.7.2 lib/tops_connect/errors.rb
tops_connect-0.7.1 lib/tops_connect/errors.rb
tops_connect-0.7.0 lib/tops_connect/errors.rb