module Europe::Vat
VAT
VAT
Constants
- BODY
- HEADERS
- WSDL
Public Class Methods
charge_vat?(origin_country, number)
click to toggle source
# File lib/europe/vat/vat.rb, line 76 def self.charge_vat?(origin_country, number) return false if number.nil? || number.empty? Europe::Vat::Fromat::VAT_REGEX.key?(origin_country.to_sym) || Europe::Vat::Fromat::VAT_REGEX.key?(number[0..1].to_sym) end
convert_date(date)
click to toggle source
# File lib/europe/vat/vat.rb, line 66 def self.convert_date(date) return unless date Date.parse(date) end
extract_data(body, position)
click to toggle source
# File lib/europe/vat/vat.rb, line 72 def self.extract_data(body, position) body[position]&.text end
response_xml(response)
click to toggle source
# File lib/europe/vat/vat.rb, line 61 def self.response_xml(response) xml = REXML::Document.new(response.body) xml.elements.first.elements[2].elements[1] end
send_request(country_code, number)
click to toggle source
# File lib/europe/vat/vat.rb, line 83 def self.send_request(country_code, number) uri = URI.parse(WSDL) body = BODY.dup.gsub('{COUNTRY_CODE}', country_code) body = body.gsub('{NUMBER}', number) # Create the HTTP objects http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Post.new(uri.request_uri, HEADERS) request.body = body # Send the request http.request(request) end
setup_response(response)
click to toggle source
# File lib/europe/vat/vat.rb, line 49 def self.setup_response(response) body = response_xml(response) { valid: extract_data(body, 3) == 'true', country_code: extract_data(body, 0), vat_number: extract_data(body, 1), request_date: convert_date(extract_data(body, 2)), name: extract_data(body, 4), address: extract_data(body, 5) } end
validate(number)
click to toggle source
# File lib/europe/vat/vat.rb, line 35 def self.validate(number) return :failed if number.size < 4 response = send_request(number[0..1], number[2..-1]) return :failed unless response.is_a? Net::HTTPSuccess return :failed if response.body.include?('soap:Fault') setup_response(response) rescue Net::OpenTimeout :timeout rescue Net::HTTPServerError :server_error end