class Valvat::Lookup::HMRC

Constants

ENDPOINT_URL
FAULTS
HEADERS

Public Instance Methods

perform() click to toggle source
# File lib/valvat/lookup/hmrc.rb, line 17
def perform
  return { valid: false } unless @options[:uk]

  parse(fetch(endpoint_uri).body)
end

Private Instance Methods

build_fault(raw) click to toggle source
# File lib/valvat/lookup/hmrc.rb, line 78
def build_fault(raw)
  fault = raw['code']
  return { valid: false } if fault == 'NOT_FOUND'

  exception = FAULTS[fault] || UnknownLookupError
  { error: exception.new("#{fault}#{raw['message'] ? " (#{raw['message']})" : ''}", self.class) }
end
build_request(uri) click to toggle source
# File lib/valvat/lookup/hmrc.rb, line 31
def build_request(uri)
  Net::HTTP::Get.new(uri.request_uri, HEADERS)
end
convert(raw) click to toggle source

Return a similar format to VIES Main differences are:

  • request_date is a (more precise) Time instead of Date

  • address is newline separated instead of coma (also more precise)

# File lib/valvat/lookup/hmrc.rb, line 43
def convert(raw)
  return build_fault(raw) if raw.key?('code')

  {
    address: format_address(raw.dig('target', 'address')),
    country_code: raw.dig('target', 'address', 'countryCode'),
    name: raw.dig('target', 'name'),
    vat_number: raw.dig('target', 'vatNumber'), valid: true
  }.tap do |hash|
    hash[:request_date] = Time.parse(raw['processingDate']) if raw.key?('processingDate')
    hash[:request_identifier] = raw['consultationNumber'] if raw.key?('consultationNumber')
  end
end
endpoint_uri() click to toggle source
# File lib/valvat/lookup/hmrc.rb, line 25
def endpoint_uri
  endpoint = "/#{@vat.to_s_wo_country}"
  endpoint += "/#{@requester.to_s_wo_country}" if @requester
  URI.parse(ENDPOINT_URL + endpoint)
end
format_address(address) click to toggle source

Example raw address from the API: {

"line1": "HM REVENUE AND CUSTOMS",
"line2": "RUBY HOUSE",
"line3": "8 RUBY PLACE",
"line4": "ABERDEEN",
"postcode": "AB10 1ZP",
"countryCode": "GB"

}

# File lib/valvat/lookup/hmrc.rb, line 66
def format_address(address)
  address&.values&.join("\n")
end
parse(body) click to toggle source
# File lib/valvat/lookup/hmrc.rb, line 35
def parse(body)
  convert(JSON.parse(body))
end