1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
#!/usr/bin/env ruby
require 'rubygems'
require 'pathname'
$basedir = Pathname.new(__FILE__).dirname.parent
$LOAD_PATH.unshift $basedir + 'lib'
require 'domain_name'
require 'set'
require 'erb'
def main
dat_file = $basedir + 'data' + 'effective_tld_names.dat'
dir = $basedir + 'lib' + 'domain_name'
erb_file = dir + 'etld_data.rb.erb'
rb_file = dir + 'etld_data.rb'
etld_data_date = File.mtime(dat_file)
File.open(dat_file, 'r:utf-8') { |dat|
etld_data = parse(dat)
File.open(rb_file, 'w:utf-8') { |rb|
File.open(erb_file, 'r:utf-8') { |erb|
rb.print ERB.new(erb.read).result(binding)
}
}
}
end
def normalize_hostname(domain)
DomainName.normalize(domain)
end
def parse(f)
{}.tap { |table|
tlds = Set[]
f.each_line { |line|
line.sub!(%r{//.*}, '')
line.strip!
next if line.empty?
case line
when /^local$/
# ignore .local
next
when /^([^!*]+)$/
domain = normalize_hostname($1)
value = 0
when /^\*\.([^!*]+)$/
domain = normalize_hostname($1)
value = -1
when /^\!([^!*]+)$/
domain = normalize_hostname($1)
value = 1
else
raise "syntax error: #{line}"
end
tld = domain.match(/(?:^|\.)([^.]+)$/)[1]
table[tld] ||= 1
table[domain] = value
}
}
end
main()
|