Extract response_status type errors

Stephen Paul Weber created

Change summary

lib/bandwidth_iris_patch.rb | 11 +++++++++++
lib/sip_account.rb          |  2 +-
2 files changed, 12 insertions(+), 1 deletion(-)

Detailed changes

lib/bandwidth_iris_patch.rb 🔗

@@ -2,10 +2,15 @@
 
 require "ruby-bandwidth-iris"
 
+# rubocop:disable Metrics/AbcSize
 module BandwidthIris
 	class APIError < StandardError
 		attr_reader :code
 
+		def self.for_response_status(description:, error_code:)
+			new(description: description, code: error_code)
+		end
+
 		def initialize(description:, code: nil)
 			super(description)
 			@code = code
@@ -27,6 +32,11 @@ module BandwidthIris
 			parsed_body = parse_xml(response.body || "")
 			return parsed_body unless response.status >= 400
 			raise APIError.new(**parsed_body[:error]) if parsed_body&.key?(:error)
+
+			if parsed_body&.key?(:response_status)
+				raise APIError.for_response_status(**parsed_body[:response_status])
+			end
+
 			raise APIErrors, parsed_body[:errors] if parsed_body&.key?(:errors)
 
 			raise Errors::GenericError.new(
@@ -35,3 +45,4 @@ module BandwidthIris
 		end
 	end
 end
+# rubocop:enable Metrics/AbcSize

lib/sip_account.rb 🔗

@@ -9,7 +9,7 @@ require_relative "mn_words"
 class SipAccount
 	def self.find(name)
 		new(BandwidthIris::SipCredential.get(name))
-	rescue BandwidthIris::Errors::GenericError # 404
+	rescue BandwidthIris::APIError # 404
 		New.new(BandwidthIris::SipCredential.new(
 			user_name: name,
 			realm: CONFIG[:sip][:realm],