class Promisepay::Error

Custom error class for rescuing from all Promisepau errors

Public Class Methods

from_response(response, errors_format = nil) click to toggle source

Returns the appropriate Promisepay::Error subclass based on status

@param [Faraday::Response] response Faraday HTTP response @return [Promisepay::Error]

# File lib/promisepay/error.rb, line 8
def self.from_response(response, errors_format = nil)
  klass = case response.status
          when 400      then Promisepay::BadRequest
          when 401      then Promisepay::Unauthorized
          when 403      then Promisepay::Forbidden
          when 404      then Promisepay::NotFound
          when 405      then Promisepay::MethodNotAllowed
          when 406      then Promisepay::NotAcceptable
          when 409      then Promisepay::Conflict
          when 422      then Promisepay::UnprocessableEntity
          when 400..499 then Promisepay::ClientError
          when 500      then Promisepay::InternalServerError
          when 501      then Promisepay::NotImplemented
          when 502      then Promisepay::BadGateway
          when 503      then Promisepay::ServiceUnavailable
          when 500..599 then Promisepay::ServerError
          end
  (klass) ? klass.new(response, errors_format) : new(response, errors_format)
end
new(response = nil, errors_format = nil) click to toggle source
Calls superclass method
# File lib/promisepay/error.rb, line 28
def initialize(response = nil, errors_format = nil)
  @response = response
  @errors_format =  errors_format
  super(build_error_message)
end

Private Instance Methods

build_error_message() click to toggle source
# File lib/promisepay/error.rb, line 36
def build_error_message
  return nil if @response.nil? || @response.body.nil?

  case @errors_format
  when 'raw'
    @response.body
  else
    json_response = JSON.parse(@response.body)
    message = ''
    message << json_response['message'] if json_response.key?('message')
    if json_response.key?('errors')
      message << json_response['errors'].map{|attribute, content| "#{attribute}: #{content}"}.join(", ")
    end
    message
  end
end