class Creditsafe::Client
Constants
- ENVIRONMENTS
Public Class Methods
new(username: nil, password: nil, savon_opts: {}, environment: :live, log_level: :warn)
click to toggle source
# File lib/creditsafe/client.rb, line 20 def initialize(username: nil, password: nil, savon_opts: {}, environment: :live, log_level: :warn) raise ArgumentError, "Username must be provided" if username.nil? raise ArgumentError, "Password must be provided" if password.nil? unless ENVIRONMENTS.include?(environment.to_sym) raise ArgumentError, "Environment needs to be one of #{ENVIRONMENTS.join('/')}" end @environment = environment.to_s @log_level = log_level @username = username @password = password @savon_opts = savon_opts end
Public Instance Methods
company_report(creditsafe_id, custom_data: nil)
click to toggle source
# File lib/creditsafe/client.rb, line 48 def company_report(creditsafe_id, custom_data: nil) request = Creditsafe::Request::CompanyReport.new(creditsafe_id, custom_data) response = invoke_soap(:retrieve_company_online_report, request.message) response. fetch(:retrieve_company_online_report_response). fetch(:retrieve_company_online_report_result). fetch(:reports). fetch(:report) end
find_company(search_criteria = {})
click to toggle source
# File lib/creditsafe/client.rb, line 36 def find_company(search_criteria = {}) request = Creditsafe::Request::FindCompany.new(search_criteria) response = invoke_soap(:find_companies, request.message) companies = response. fetch(:find_companies_response). fetch(:find_companies_result). fetch(:companies) companies.nil? ? nil : companies.fetch(:company) end
inspect()
click to toggle source
# File lib/creditsafe/client.rb, line 60 def inspect "#<#{self.class} @username='#{@username}'>" end
Private Instance Methods
auth_header()
click to toggle source
# File lib/creditsafe/client.rb, line 137 def auth_header auth_value = "Basic " + Base64.encode64("#{@username}:#{@password}").chomp { "Authorization" => auth_value } end
build_savon_client()
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/creditsafe/client.rb, line 143 def build_savon_client options = { env_namespace: "soapenv", namespace_identifier: Creditsafe::Namespace::OPER, namespaces: Creditsafe::Namespace::ALL, wsdl: wsdl_path, headers: auth_header, convert_request_keys_to: :none, adapter: :excon, log: true, log_level: @log_level, pretty_print_xml: true, } Savon.client(options.merge(@savon_opts)) end
client()
click to toggle source
rubocop:enable Metrics/MethodLength
# File lib/creditsafe/client.rb, line 133 def client @client ||= build_savon_client end
handle_error(error)
click to toggle source
There's a potential bug in the creditsafe API where they actually return an HTTP 401 if you're unauthorized, hence the sad special case below
rubocop:disable Metrics/MethodLength
# File lib/creditsafe/client.rb, line 116 def handle_error(error) case error when Savon::SOAPFault return UnknownApiError.new(error.message) when Savon::HTTPError if error.to_hash[:code] == 401 return AccountError.new("Unauthorized: invalid credentials") end return UnknownApiError.new(error.message) when Excon::Errors::Error return HttpError.new("Error making HTTP request: #{error.message}") end error end
handle_message_for_response(response)
click to toggle source
# File lib/creditsafe/client.rb, line 66 def handle_message_for_response(response) [ *response.xpath("//q1:Message"), *response.xpath("//xmlns:Message"), ].each do |message| api_message = Creditsafe::Messages.for_code(message.attributes["Code"].value) api_error_message = api_message.message api_error_message += " (#{message.text})" unless message.text.blank? raise api_message.error_class, api_error_message if api_message.error? end end
invoke_soap(message_type, message)
click to toggle source
rubocop:disable Style/RescueStandardError rubocop:disable Metrics/MethodLength rubocop:disable Metrics/AbcSize
# File lib/creditsafe/client.rb, line 83 def invoke_soap(message_type, message) started = Time.now notification_payload = { request: message } response = client.call(message_type, message: message) handle_message_for_response(response) notification_payload[:response] = response.body rescue Excon::Errors::Timeout => raw_error notification_payload[:error] = handle_error(raw_error) raise TimeoutError rescue Excon::Errors::BadGateway => raw_error notification_payload[:error] = handle_error(raw_error) raise BadGatewayError rescue => raw_error processed_error = handle_error(raw_error) notification_payload[:error] = processed_error raise processed_error ensure publish("creditsafe.#{message_type}", started, Time.now, SecureRandom.hex(10), notification_payload) end
publish(*args)
click to toggle source
rubocop:enable Metrics/AbcSize rubocop:enable Metrics/MethodLength rubocop:enable Style/RescueStandardError
# File lib/creditsafe/client.rb, line 108 def publish(*args) ActiveSupport::Notifications.publish(*args) end
wsdl_path()
click to toggle source
rubocop:enable Metrics/MethodLength
# File lib/creditsafe/client.rb, line 160 def wsdl_path root_dir = File.join(File.dirname(__FILE__), "..", "..") File.join(root_dir, "data", "creditsafe-#{@environment}.xml") end