class PostcodeValidation::Gateway::PCAAddressList

Constants

KEY

Public Instance Methods

query(search_term:, country:, more_results_id: nil) click to toggle source
# File lib/postcode_validation/gateway/pca_address_list.rb, line 11
def query(search_term:, country:, more_results_id: nil)
  address_list_for_postcode(country, search_term, more_results_id).map do |row|
    raise PCARequestError, error_message(row) if row.key?('Error')

    if row['Type'] == 'Postcode'
      self.class.new.query(
        country: country,
        search_term: search_term,
        more_results_id: row['Id']
      )
    elsif row['Type'] == 'Address'
      PostcodeValidation::Domain::Address.new(row: row, key: KEY)
    end
  end.compact.flatten
end

Private Instance Methods

address_list_for_postcode(country, search_term, more_results_id) click to toggle source
# File lib/postcode_validation/gateway/pca_address_list.rb, line 33
def address_list_for_postcode(country, search_term, more_results_id)
  JSON.parse(
    self.class.get(
      '/Capture/Interactive/Find/1.00/json.ws',
      lookup_parameters(country, search_term, more_results_id)
    ).body
  )
end
error_message(row) click to toggle source
# File lib/postcode_validation/gateway/pca_address_list.rb, line 29
def error_message(row)
  "#{row['Error']} #{row['Cause']} #{row['Resolution']}"
end
lookup_parameters(country, search_term, more_results_id) click to toggle source
# File lib/postcode_validation/gateway/pca_address_list.rb, line 42
def lookup_parameters(country, search_term, more_results_id)
  result = {
    query: {
      Countries: country,
      Key: KEY,
      Text: search_term,
      Limit: 8
    }
  }

  result[:query].merge!(Container: more_results_id) unless more_results_id.nil?
  result
end