module Europe::Vat::Rates
Constants
- FALLBACK_RATES
- RATES_URL
Public Class Methods
extract_rates(resp)
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/europe/vat/rates.rb, line 27 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
fetch_rates()
click to toggle 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
filter_rate(result, rates)
click to toggle source
rubocop:enable Metrics/MethodLength
# File lib/europe/vat/rates.rb, line 46 def self.filter_rate(result, rates) country = result[0].text rate = result[3].text country_code = Europe::Countries::Reversed.generate(:name)[country] rates[country_code] = rate.to_f if country_code rates end
retrieve()
click to toggle source
# File lib/europe/vat/rates.rb, line 19 def self.retrieve resp = fetch_rates return FALLBACK_RATES if resp.nil? extract_rates(resp) end