Sha256: d75f4ebf0f09f4fa4918d01a83a94a6c300833eb29ab37bae2247e3a7d7e6547
Contents?: true
Size: 1.37 KB
Versions: 8
Compression:
Stored size: 1.37 KB
Contents
# frozen_string_literal: true module Imis module Error class Api < StandardError attr_reader :response attr_accessor :metadata def self.from(response) new('The iMIS API returned an error.', response) end def initialize(message, response, metadata = {}) super(message) @metadata = metadata @response = response end def bugsnag_meta_data { api: { status: status, body: body }.merge!(metadata) } end private def status @status ||= case response.code when '400' :bad_request when '401' :unauthorized # RequestVerificationToken invalid when '404' :not_found when '422' :unprocessable_entity # validation error when /^50\d$/ :internal_server_error # error within iMIS end end def response_body @response_body ||= JSON.parse(response.body) rescue StandardError @response_body ||= response.body end def body return response_body unless response_body.is_a?(Hash) case response_body['error'] when 'invalid_grant' response_body['error_description'] else # Unknown error type: just use the raw response response.body end end end end end
Version data entries
8 entries across 8 versions & 1 rubygems