Sha256: c9168a9292dd6117dbff809d64dbf949f091778a3a4a5b75b624d2c542ef1fce

Contents?: true

Size: 1.2 KB

Versions: 4

Compression:

Stored size: 1.2 KB

Contents

require 'europe/vat/rates'
require 'europe/vat/format'
require 'savon'

# Europe Gem
module Europe
  # VAT
  module Vat
    WSDL = 'http://ec.europa.eu/taxation_customs/' \
           'vies/checkVatService.wsdl'.freeze
    NS = 'urn:ec.europa.eu:taxud:vies:services:checkVat:types'.freeze
    def self.validate(number)
      response = send_request(number[0..1], number[2..-1])
      return :failed unless response.success?
      response.body[:check_vat_response].tap { |x| x.delete(:@xmlns) }
    rescue Savon::HTTPError, Savon::SOAPFault
      return :failed
    rescue Timeout::Error
      return :timeout
    end

    def self.charge_vat?(origin_country, number)
      return false if number.nil? || number.empty?
      if origin_country.to_sym == number[0..1].to_sym
        true
      else
        Europe::Countries::COUNTRIES
          .keys.include?(number[0..1].to_sym)
      end
    end

    def self.send_request(country_code, number)
      client = Savon.client(wsdl: WSDL, namespace: NS,
                            open_timeout: 10, read_timeout: 10)

      client.call(:check_vat,
                  message: { countryCode: country_code,
                             vatNumber: number.delete(' ') })
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
europe-0.0.8 lib/europe/vat/vat.rb
europe-0.0.7 lib/europe/vat/vat.rb
europe-0.0.6 lib/europe/vat/vat.rb
europe-0.0.5 lib/europe/vat/vat.rb