class PostcodeValidation::UseCase::AddressList

Attributes

address_match_gateway[R]
logger[R]

Public Class Methods

new(address_list_gateway:, logger: nil) click to toggle source
# File lib/postcode_validation/use_case/address_list.rb, line 6
def initialize(address_list_gateway:, logger: nil)
  @address_list_gateway = address_list_gateway
  @logger = logger
  @errors = []
end

Public Instance Methods

execute(postcode:, country:) click to toggle source
# File lib/postcode_validation/use_case/address_list.rb, line 12
def execute(postcode:, country:)
  check_country(country)
  addresses = matched_addresses(postcode, country)

  formatted(addresses)
rescue PostcodeValidation::Error::RequestError => e
  log_error(e)
end

Private Instance Methods

check_country(country) click to toggle source
# File lib/postcode_validation/use_case/address_list.rb, line 45
def check_country(country)
  @errors << 'no_country_provided' if country.nil?
end
formatted(addresses) click to toggle source
# File lib/postcode_validation/use_case/address_list.rb, line 25
def formatted(addresses)
  return { errors: @errors } unless @errors.empty?

  addresses.map do |address|
    {
      id: address.id,
      label: address.label
    }
  end
end
log_error(e) click to toggle source
# File lib/postcode_validation/use_case/address_list.rb, line 36
def log_error(e)
  logger.error(e) unless logger.nil?
end
matched_addresses(postcode, country) click to toggle source
# File lib/postcode_validation/use_case/address_list.rb, line 40
def matched_addresses(postcode, country)
  @address_list_gateway.query(search_term: postcode,
                              country: country)
end