# frozen_string_literal: true require 'faraday' require 'multi_json' require 'creditsafe/configuration' require 'creditsafe/faraday_auth' module Creditsafe class Client BASE_URLS = { production: 'https://connect.creditsafe.com/v1/', sandbox: 'https://connect.sandbox.creditsafe.com/v1/' }.freeze def initialize Faraday::Request.register_middleware creditsafe_auth: -> { Creditsafe::FaradayAuth } end def get(path, params = {}) connection.get(path, params).tap do |response| handle_response(response) end end def post(path, params = {}) connection.post(path, MultiJson.dump(params)).tap do |response| handle_response(response) end end def connection username = Creditsafe.configuration.username passwd = Creditsafe.configuration.password @connection ||= Faraday.new(url: api_url) do |conn| conn.request :creditsafe_auth, username, passwd conn.response :json, parser_options: { symbolize_names: true } conn.response :logger if Creditsafe.configuration.debug conn.adapter Faraday.default_adapter end end def api_url BASE_URLS[Creditsafe.configuration.environment.to_sym] end def handle_response(response) return if response.success? case response.status when 401 raise UnauthorizedError, response.body when 400 raise InvalidRequestError, response.body else raise GenericError, response.body end end end end