forked from infused/ziptz
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRakefile
80 lines (66 loc) · 2.23 KB
/
Rakefile
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
require 'bundler/setup'
Bundler.setup(:default, :development)
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new :spec do |t|
t.rspec_opts = %w[--color]
end
RSpec::Core::RakeTask.new :specdoc do |t|
t.rspec_opts = %w[-fl]
end
task default: :spec
desc 'Open an irb session preloaded with this library'
task :console do
sh 'irb -rubygems -I lib -r ziptz.rb'
end
desc 'Create ziptz db from zipcodes database'
task :create_ziptz do
require 'yaml'
require 'active_record'
require 'tty-spinner'
spinner = TTY::Spinner.new('[:spinner] Retrieving zip codes from database')
spinner.auto_spin
db_config = YAML.safe_load(File.open('database.yml'))
ActiveRecord::Base.establish_connection(db_config)
class ZipCode < ActiveRecord::Base
self.table_name = 'ZIPCodes'
self.primary_key = 'ZipCode'
alias_attribute :zip_code, :ZipCode
alias_attribute :time_zone, :TimeZone
alias_attribute :day_light_saving, :DayLightSaving
end
spinner = TTY::Spinner.new('[:spinner] :message')
spinner.update message: 'Retrieving zip codes from database'
data = {}
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] ||= zip.time_zone
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').to_s} bytes)"
spinner.success
# puts File.size('data/tz.data').to_s
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').to_s} bytes)"
spinner.success
rescue StandardError
spinner && spinner.error
raise
end