Sha256: d5b147b5e4c2d7b4e49328f2cce2c5bc3592b51ed579a51e94dd1805eda479bf

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

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'
      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

1 entries across 1 versions & 1 rubygems

Version Path
europe-0.0.14 lib/europe/vat/rates.rb