Sha256: 3a3f5abeeead3c97a88f884a22f06ded0a65712cd7bbeca82183f05e6d4b45cb
Contents?: true
Size: 1.84 KB
Versions: 1
Compression:
Stored size: 1.84 KB
Contents
require 'vat_rates/version' require 'open-uri' require 'nokogiri' require 'oj' module VatRates URL = 'http://ec.europa.eu/taxation_customs/tic/public/vatRates/vatratesSearch.html' FILEPATH = File.expand_path('../../data.json', __FILE__) class << self def fetch html = open(URL) doc = Nokogiri::HTML(html) data = [] content = doc.css('#tic-content').first content.children.each do |child| if child.name == 'h2' code, name = child.text.split(' - ') data << { code: code, name: name, rate: normalize_rate(child.next.next.next.next.css('td')[1].text) } elsif child.name == 'h4' data.last[:regions] ||= [] region = { name: child.text } standard = child.next.next.next.next if standard.text.include?('No Standard Rate') region[:rate] = 0 else region[:rate] = normalize_rate(standard.css('td')[1].text) end reduced = standard.next.next.next.next.next.next unless reduced.text.include?('No information available') reduced.css('tr')[1..-1].each do |row| columns = row.css('td') region[:reduced_rates] = { category: columns[0].text, rate: normalize_rate(columns[1].text) } end end data.last[:regions] << region end end data end def load(filepath = FILEPATH) if filepath Oj.load(File.read(filepath)) else get_rates end end def save(filepath) File.open(filepath, 'w') do |file| file.write(Oj.dump(fetch)) end end private def normalize_rate(number) number.sub(',', '.').gsub(/[% ]/, '').to_f end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
vat_rates-0.0.2 | lib/vat_rates.rb |