lib/creditsafe/request/find_company.rb in creditsafe-0.5.2 vs lib/creditsafe/request/find_company.rb in creditsafe-0.6.0
- old
+ new
@@ -1,18 +1,20 @@
# frozen_string_literal: true
require "creditsafe/match_type"
require "creditsafe/namespace"
+require "creditsafe/constants"
module Creditsafe
module Request
class FindCompany
def initialize(search_criteria)
check_search_criteria(search_criteria)
@country_code = search_criteria[:country_code]
@registration_number = search_criteria[:registration_number]
@company_name = search_criteria[:company_name]
+ @vat_number = search_criteria[:vat_number]
@city = search_criteria[:city]
@postal_code = search_criteria[:postal_code]
end
# rubocop:disable Metrics/MethodLength
@@ -30,10 +32,15 @@
unless registration_number.nil?
search_criteria["#{Creditsafe::Namespace::DAT}:RegistrationNumber"] =
registration_number
end
+ unless vat_number.nil?
+ search_criteria["#{Creditsafe::Namespace::DAT}:VatNumber"] =
+ vat_number
+ end
+
unless city.nil?
search_criteria["#{Creditsafe::Namespace::DAT}:Address"] = {
"#{Creditsafe::Namespace::DAT}:City" => city,
}
end
@@ -49,11 +56,12 @@
# rubocop:enable Metrics/AbcSize
# rubocop:enable Metrics/MethodLength
private
- attr_reader :country_code, :registration_number, :city, :company_name, :postal_code
+ attr_reader :country_code, :registration_number, :city, :company_name, :postal_code,
+ :vat_number
def match_type
Creditsafe::MatchType::ALLOWED[country_code.upcase.to_sym]&.first ||
Creditsafe::MatchType::MATCH_BLOCK
end
@@ -67,32 +75,46 @@
}
end
# rubocop:disable Metrics/CyclomaticComplexity
# rubocop:disable Metrics/MethodLength
+ # rubocop:disable Metrics/PerceivedComplexity
+ # rubocop:disable Metrics/AbcSize
def check_search_criteria(search_criteria)
if search_criteria[:country_code].nil?
raise ArgumentError, "country_code is a required search criteria"
end
- unless only_registration_number_or_company_name_provided?(search_criteria)
- raise ArgumentError, "registration_number or company_name (not both) are " \
- "required search criteria"
+ unless only_one_required_criteria?(search_criteria)
+ raise ArgumentError, "only one of registration_number, company_name or " \
+ "vat number is required search criteria"
end
if search_criteria[:city] && search_criteria[:country_code] != "DE"
raise ArgumentError, "city is only supported for German searches"
end
if search_criteria[:postal_code] && search_criteria[:country_code] != "DE"
raise ArgumentError, "Postal code is only supported for German searches"
end
+
+ if search_criteria[:vat_number] && !Constants::Country::VAT_NUMBER_SUPPORTED.
+ include?(search_criteria[:country_code])
+ raise ArgumentError, "VAT number is not supported in this country"
+ end
end
+ # rubocop:enable Metrics/AbcSize
+ # rubocop:enable Metrics/PerceivedComplexity
# rubocop:enable Metrics/MethodLength
# rubocop:enable Metrics/CyclomaticComplexity
- def only_registration_number_or_company_name_provided?(search_criteria)
- search_criteria[:registration_number].nil? ^ search_criteria[:company_name].nil?
+ def only_one_required_criteria?(search_criteria)
+ by_registration_number = !search_criteria[:registration_number].nil?
+ by_company_name = !search_criteria[:company_name].nil?
+ by_vat_number = !search_criteria[:vat_number].nil?
+
+ (by_registration_number ^ by_company_name ^ by_vat_number) &&
+ !(by_registration_number && by_company_name && by_vat_number)
end
end
end
end