Sha256: 986a79987302240ef35294479cd3981773c5eb524fee299cf5bcd2df9b3a6329

Contents?: true

Size: 1.02 KB

Versions: 2

Compression:

Stored size: 1.02 KB

Contents

require 'rexml/document'

module Europe
  module Vat
    # Rates
    module Rates
      RATES_URL = 'https://europa.eu/youreurope/business/taxation/' \
                  'vat/vat-rules-rates/index_en.htm'.freeze
      def self.retrieve
        resp = fetch_rates
        return resp if resp == :failed
        extract_rates(resp)
      end

      def self.extract_rates(resp)
        rates = {}

        data = resp.scan(%r{\<tbody\>(.*)\<\/tbody\>}m).first.first.strip
        xml = REXML::Document.new("<root>#{data}</root>")
        xml.first.elements.each('tr') do |result|
          next if result[3].nil?
          rates = filter_rate(result, rates)
        end
        rates
      end

      def self.filter_rate(result, rates)
        country = result[3].text
        rate = result[5].text
        rates[country.to_sym] = rate.to_f if country
        rates
      end

      def self.fetch_rates
        resp = Net::HTTP.get_response(URI.parse(RATES_URL))
        resp.code.to_i == 200 ? resp.body : :failed
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
europe-0.0.12 lib/europe/vat/rates.rb
europe-0.0.11 lib/europe/vat/rates.rb