class UncleKryon::CanProvsTerrs

Constants

DEFAULT_FILEPATH

Public Class Methods

load_file(filepath=DEFAULT_FILEPATH) click to toggle source
# File lib/unclekryon/iso/can_prov_terr.rb, line 42
def self.load_file(filepath=DEFAULT_FILEPATH)
  return CanProvsTerrs.new.load_file(filepath)
end
new() click to toggle source
Calls superclass method UncleKryon::BaseIsos::new
# File lib/unclekryon/iso/can_prov_terr.rb, line 36
def initialize
  super()

  @id = 'CAN Provinces & Territories'
end
parse_and_save_to_file(parse_filepath,save_filepath=DEFAULT_FILEPATH) click to toggle source

@param parse_filepath [String] use web browser's developer tools to copy & paste table HTML

into local file

@param save_filepath [String] local file to save YAML to @see www.iso.org/obp/ui/#iso:code:3166:CA

# File lib/unclekryon/iso/can_prov_terr.rb, line 50
def self.parse_and_save_to_file(parse_filepath,save_filepath=DEFAULT_FILEPATH)
  doc = Nokogiri::HTML(URI(parse_filepath).open,nil,'utf-8')
  trs = doc.css('tr')

  provs_terrs = CanProvsTerrs.new

  trs.each do |tr|
    tds = tr.css('td')

    # Skip French; we just want English
    next if tds[4].content.gsub(/[[:space:]]+/,' ').strip.downcase == 'fr'

    i = 0
    tr = []

    tds.each do |td|
      c = td.content
      c.gsub!(/[[:space:]]+/,' ')
      c.strip!
      tr.push(c)

      if (i += 1) >= 7
        #puts tr.inspect()
        prov_terr = CanProvTerr.new(tr)
        raise "CAN prov/terr already exists: #{prov_terr.inspect}" if provs_terrs.key?(prov_terr.code)

        provs_terrs.values.each_value do |v|
          puts "Duplicate CAN prov/terr names: #{v.name}" if v.name == prov_terr.name
        end

        provs_terrs[prov_terr.code] = prov_terr
        tr.clear
        i = 0
      end
    end
  end

  provs_terrs.sort_keys!
  provs_terrs.save_to_file(save_filepath)
end