Sha256: a1d444c29a87b7654c83cba95f54671a68cd25d5f0112c5e024df798f2f62d7a

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

module Bunq
  class ResponseError < StandardError
    attr_reader :code
    attr_reader :headers
    attr_reader :body

    def initialize(msg = "Response error", code: nil, headers: nil, body: nil)
      @code = code
      @headers = headers || {}
      @body = body
      super("#{msg} (code: #{code}, body: #{body})")
    end

    # Returns the parsed body if it is a JSON document, nil otherwise.
    # @param opts [Hash] Optional options that are passed to `JSON.parse`.
    def parsed_body(opts = {})
      JSON.parse(@body, opts) if @body && @headers['content-type'] && @headers['content-type'].include?('application/json')
    end

    # Returns an array of errors returned from the API, or nil if no errors are returned.
    # @return [Array|nil]
    def errors
      json = parsed_body
      json ? json['Error'] : nil
    end
  end

  class UnexpectedResponse < ResponseError; end
  class RequestSignatureRequired < ResponseError; end
  class AbsentResponseSignature < ResponseError; end
  class TooManyRequestsResponse < ResponseError; end
  class UnauthorisedResponse < ResponseError; end
  class ResourceNotFound < ResponseError; end
  class Timeout < StandardError; end
  class MaintenanceResponse < ResponseError; end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bunq-client-0.6.1 lib/bunq/errors.rb
bunq-client-0.6.0 lib/bunq/errors.rb