module Europe::Vat::Rates
Constants
- FALLBACK_RATES
- RATES_URL
Public Class Methods
Source
# File lib/europe/vat/rates.rb, line 26 def self.extract_rates(resp) rates = {} begin data = resp.scan(%r{\<tbody\>(.*)\<\/tbody\>}m).first.first.strip rescue NoMethodError return FALLBACK_RATES end 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
rubocop:disable Metrics/MethodLength
Source
# File lib/europe/vat/rates.rb, line 54 def self.fetch_rates resp = Net::HTTP.get_response(URI.parse(RATES_URL)) resp.code.to_i == 200 ? resp.body : nil end
Source
# File lib/europe/vat/rates.rb, line 45 def self.filter_rate(result, rates) return unless result[1].text.size == 2 country = result[1].text rate = result[5].text rates[country.to_sym] = rate.to_f if country && rate rates end
rubocop:enable Metrics/MethodLength
Source
# File lib/europe/vat/rates.rb, line 18 def self.retrieve resp = fetch_rates return FALLBACK_RATES if resp.nil? extract_rates(resp) end