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
64
65
66
67
|
# File 'lib/zip_code.rb', line 16
def self.import
spinner = TTY::Spinner.new('[:spinner] Retrieving zip codes from database')
spinner.auto_spin
spinner = TTY::Spinner.new('[:spinner] :message')
spinner.update message: 'Retrieving zip codes from database'
data = {}
ZipCode.distinct(:ZipCode).find_each do |zip|
next if zip.time_zone.blank? || zip.day_light_saving.blank?
data[zip.zip_code] ||= {}
data[zip.zip_code][:tz] ||= begin
if zip.state == 'AZ' && zip.day_light_saving == 'N'
'America/Phoenix'
elsif zip.state == 'AK' && zip.time_zone == '10'
'America/Adak'
else
Ziptz::TZ_INFO[zip.time_zone][:name]
end
end
data[zip.zip_code][:dst] ||= zip.day_light_saving
end
spinner.update message: "Retrieving zip codes from database (#{data.size} records)"
spinner.success
spinner = TTY::Spinner.new('[:spinner] :message')
spinner.update message: 'Writing tz.data'
spinner.auto_spin
lines = data.map { |k, v| "#{k}=#{v[:tz]}" }
lines.sort!
File.open('data/tz.data', 'w') do |f|
lines.each { |line| f.puts line }
end
spinner.update message: "Writing tz.data (#{File.size('data/tz.data')} bytes)"
spinner.success
spinner = TTY::Spinner.new('[:spinner] :message')
spinner.update message: 'Writing dst.data'
spinner.auto_spin
lines = data.map { |k, v| "#{k}=#{v[:dst] =~ /y/i ? 1 : 0}" }
lines.sort!
File.open('data/dst.data', 'w') do |f|
lines.each { |line| f.puts line }
end
spinner.update message: "Writing dst.data (#{File.size('data/dst.data')} bytes)"
spinner.success
rescue StandardError
spinner && spinner.error
raise
end
|