Sha256: 565844ef23d61ffebe524bb9108108e4dd035ff99c07c734232925e560098edf
Contents?: true
Size: 1.46 KB
Versions: 3
Compression:
Stored size: 1.46 KB
Contents
module Europe module Vat # Rates module Rates RATES_URL = 'http://ec.europa.eu/taxation_customs/tic/' \ 'public/vatRates/vatratesSearch.html'.freeze def self.retrieve resp = fetch_rates return resp if resp == :failed extract_rates(resp) end def self.extract_country_code(data) Europe::Countries::Reversed.generate(:name) \ [data.css('td').first.text.strip!] end def self.extract_rate_number(data) data.css('td')[1].css('div span').text.tr('%', '').to_f end def self.extract_rates(resp) rates = {} doc = Nokogiri::XML(resp) doc.css('#national tbody tr')[0..-2].each do |data| key = extract_country_code(data) rates[key] = extract_rate_number(data) end rates end def self.generate_url uri = URI.parse(RATES_URL) params = 'listOfTypes=Standard&dateFilter=' + Time.new.strftime('%d/%m/%Y') [*1..Europe::Countries::COUNTRIES.count].each do |index| params += '&listOfMsa=' + index.to_s end [uri, params] end def self.fetch_rates uri, params = generate_url req = Net::HTTP::Post.new(uri.path) req.body = params resp = Net::HTTP.start(uri.hostname, uri.port) do |http| http.request(req) end resp.code.to_i == 200 ? resp.body : :failed end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
europe-0.0.7 | lib/europe/vat/rates.rb |
europe-0.0.6 | lib/europe/vat/rates.rb |
europe-0.0.5 | lib/europe/vat/rates.rb |