class Jetel::Modules::Iso3166

Public Class Methods

sources() click to toggle source
# File lib/jetel/modules/iso3166/iso3166.rb, line 36
def sources
  [
    {
      name: 'iso3166',
      url: 'https://en.wikipedia.org/wiki/ISO_3166-1'
    }
  ]
end

Public Instance Methods

download(global_options, options, args) click to toggle source
# File lib/jetel/modules/iso3166/iso3166.rb, line 46
def download(global_options, options, args)
  self.class.sources.pmap do |source|
    download_source(source, global_options.merge(options))
  end
end
extract(global_options, options, args) click to toggle source
# File lib/jetel/modules/iso3166/iso3166.rb, line 52
def extract(global_options, options, args)
  self.class.sources.pmap do |source|
    downloaded_file = downloaded_file(source, global_options.merge(options))
    dest_dir = extract_dir(source, global_options.merge(options))

    puts "Extracting #{downloaded_file}"

    FileUtils.mkdir_p(dest_dir)
    FileUtils.cp(downloaded_file, dest_dir)
  end
end
transform(global_options, options, args) click to toggle source
# File lib/jetel/modules/iso3166/iso3166.rb, line 64
def transform(global_options, options, args)
  self.class.sources.pmap do |source|
    extracted_file = extracted_file(source, global_options.merge(options))
    dest_dir = transform_dir(source, global_options.merge(options))
    FileUtils.mkdir_p(dest_dir)

    puts "Transforming #{extracted_file}"

    page = Nokogiri::HTML(open(extracted_file))
    rows = page.css('table.wikitable.sortable tr')

    headers = [
      'name',
      'alpha2',
      'alpha3',
      'numeric'
    ]

    transformed_file = "#{extracted_file.gsub(extract_dir(source, global_options.merge(options)), dest_dir)}.csv"
    CSV.open(transformed_file, 'w', :write_headers => true, :headers => headers, :quote_char => '"', :force_quotes => true) do |csv|
      rows.each do |row|
        td = row.css('td')

        next if td.length < 4

        name = td[0].css('a').text
        alpha2 = td[1].text
        alpha3 = td[2].text
        numeric = td[3].text

        csv << [
           name,
           alpha2,
           alpha3,
           numeric
        ]
      end
    end
  end
end