ziptz 2.1.11 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +29 -28
- data/LICENSE +1 -1
- data/README.md +104 -20
- data/Rakefile +0 -6
- data/data/tz.data +0 -0
- data/data/tzm.data +3 -0
- data/lib/ziptz.rb +32 -46
- data/spec/ziptz_spec.rb +2 -2
- metadata +4 -5
- data/data/dst.data +0 -41689
- data/lib/zip_code.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e542801fa40a2a225e67c8e7dead718bec94979238e27b64d53578723ce8906e
|
4
|
+
data.tar.gz: c720f121c5bd87726882d86348c707108a329fc492985584c8f04e4b76e732be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f0eafc3c80b0c7074f561f1f291ae40591f4e97996943e7ecbdcb9c3c54e6bf67f79141d5b1c92b8aba0c7dce38bf0d493dff39c1c108393edd1d4e26fa636e
|
7
|
+
data.tar.gz: 2cde6491cca2335357f0cab943b5c22b89ffdb38258398d23df891369e0c34f6a6c8a6cc5af6416c808d530ac6e575462bc404c57132677a919fbb97bda2b7fc
|
data/Gemfile.lock
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ziptz (
|
4
|
+
ziptz (3.0.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
activemodel (6.0.3.
|
10
|
-
activesupport (= 6.0.3.
|
11
|
-
activerecord (6.0.3.
|
12
|
-
activemodel (= 6.0.3.
|
13
|
-
activesupport (= 6.0.3.
|
14
|
-
activesupport (6.0.3.
|
9
|
+
activemodel (6.0.3.4)
|
10
|
+
activesupport (= 6.0.3.4)
|
11
|
+
activerecord (6.0.3.4)
|
12
|
+
activemodel (= 6.0.3.4)
|
13
|
+
activesupport (= 6.0.3.4)
|
14
|
+
activesupport (6.0.3.4)
|
15
15
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
16
|
i18n (>= 0.7, < 2)
|
17
17
|
minitest (~> 5.1)
|
@@ -55,7 +55,7 @@ GEM
|
|
55
55
|
nenv (~> 0.1)
|
56
56
|
shellany (~> 0.0)
|
57
57
|
parallel (1.19.2)
|
58
|
-
parser (2.7.
|
58
|
+
parser (2.7.2.0)
|
59
59
|
ast (~> 2.4.1)
|
60
60
|
pry (0.13.1)
|
61
61
|
coderay (~> 1.1)
|
@@ -65,39 +65,40 @@ GEM
|
|
65
65
|
rb-fsevent (0.10.4)
|
66
66
|
rb-inotify (0.10.1)
|
67
67
|
ffi (~> 1.0)
|
68
|
-
regexp_parser (1.8.
|
69
|
-
reline (0.1.
|
68
|
+
regexp_parser (1.8.2)
|
69
|
+
reline (0.1.7)
|
70
70
|
io-console (~> 0.5)
|
71
71
|
rexml (3.2.4)
|
72
|
-
rspec (3.
|
73
|
-
rspec-core (~> 3.
|
74
|
-
rspec-expectations (~> 3.
|
75
|
-
rspec-mocks (~> 3.
|
76
|
-
rspec-core (3.
|
77
|
-
rspec-support (~> 3.
|
78
|
-
rspec-expectations (3.
|
72
|
+
rspec (3.10.0)
|
73
|
+
rspec-core (~> 3.10.0)
|
74
|
+
rspec-expectations (~> 3.10.0)
|
75
|
+
rspec-mocks (~> 3.10.0)
|
76
|
+
rspec-core (3.10.0)
|
77
|
+
rspec-support (~> 3.10.0)
|
78
|
+
rspec-expectations (3.10.0)
|
79
79
|
diff-lcs (>= 1.2.0, < 2.0)
|
80
|
-
rspec-support (~> 3.
|
81
|
-
rspec-mocks (3.
|
80
|
+
rspec-support (~> 3.10.0)
|
81
|
+
rspec-mocks (3.10.0)
|
82
82
|
diff-lcs (>= 1.2.0, < 2.0)
|
83
|
-
rspec-support (~> 3.
|
84
|
-
rspec-support (3.
|
85
|
-
rubocop (0.
|
83
|
+
rspec-support (~> 3.10.0)
|
84
|
+
rspec-support (3.10.0)
|
85
|
+
rubocop (0.93.1)
|
86
86
|
parallel (~> 1.10)
|
87
87
|
parser (>= 2.7.1.5)
|
88
88
|
rainbow (>= 2.2.2, < 4.0)
|
89
|
-
regexp_parser (>= 1.
|
89
|
+
regexp_parser (>= 1.8)
|
90
90
|
rexml
|
91
|
-
rubocop-ast (>= 0.
|
91
|
+
rubocop-ast (>= 0.6.0)
|
92
92
|
ruby-progressbar (~> 1.7)
|
93
93
|
unicode-display_width (>= 1.4.0, < 2.0)
|
94
|
-
rubocop-ast (
|
94
|
+
rubocop-ast (1.1.0)
|
95
95
|
parser (>= 2.7.1.5)
|
96
96
|
rubocop-performance (1.8.1)
|
97
97
|
rubocop (>= 0.87.0)
|
98
98
|
rubocop-ast (>= 0.4.0)
|
99
|
-
rubocop-rspec (1.
|
99
|
+
rubocop-rspec (1.44.1)
|
100
100
|
rubocop (~> 0.87)
|
101
|
+
rubocop-ast (>= 0.7.1)
|
101
102
|
ruby-progressbar (1.10.1)
|
102
103
|
shellany (0.0.1)
|
103
104
|
thor (1.0.1)
|
@@ -108,7 +109,7 @@ GEM
|
|
108
109
|
tzinfo (1.2.7)
|
109
110
|
thread_safe (~> 0.1)
|
110
111
|
unicode-display_width (1.7.0)
|
111
|
-
zeitwerk (2.4.
|
112
|
+
zeitwerk (2.4.1)
|
112
113
|
|
113
114
|
PLATFORMS
|
114
115
|
ruby
|
@@ -130,4 +131,4 @@ DEPENDENCIES
|
|
130
131
|
ziptz!
|
131
132
|
|
132
133
|
BUNDLED WITH
|
133
|
-
1.
|
134
|
+
2.1.4
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,12 +1,18 @@
|
|
1
1
|
# Ziptz
|
2
2
|
[](https://rubygems.org/gems/ziptz)
|
3
|
-
[](http://travis-ci.
|
3
|
+
[](http://travis-ci.com/infused/ziptz)
|
4
4
|
[](https://rubygems.org/gems/ziptz/)
|
5
5
|
[](https://github.com/infused/ziptz)
|
6
6
|
|
7
|
-
Get time zone
|
7
|
+
Get time zone, daylight saving time, and base offset for any US ZIP code.
|
8
8
|
|
9
|
-
<i>ZIP codes are up to date as of <b>
|
9
|
+
<i>ZIP codes are up to date as of <b>April 2021</b>.</i>
|
10
|
+
|
11
|
+
## Compatibility
|
12
|
+
|
13
|
+
Ziptz is tested to work with the following versions of Ruby:
|
14
|
+
|
15
|
+
* Ruby 2.3.x, 2.4.x, 2.5.x, 2.6.x, 2.7.x, 3.0.x, and TruffleRuby
|
10
16
|
|
11
17
|
## Installation
|
12
18
|
|
@@ -24,7 +30,7 @@ Get the time zone name for any ZIP code:
|
|
24
30
|
|
25
31
|
Get the time zone offset for any ZIP code:
|
26
32
|
|
27
|
-
z.time_zone_offset('97213') #=> -
|
33
|
+
z.time_zone_offset('97213') #=> -28800
|
28
34
|
|
29
35
|
<em>Note that offsets do not include daylight saving time.</em>
|
30
36
|
|
@@ -34,28 +40,106 @@ Determine if the ZIP code uses Daylight Saving Time:
|
|
34
40
|
|
35
41
|
Get all the zip codes in a time zone:
|
36
42
|
|
37
|
-
z.zips('Pacific/
|
43
|
+
z.zips('Pacific/Chuuk') #=> ["96942", "96943"]
|
38
44
|
|
39
45
|
|
40
46
|
## Supported Time Zones
|
41
47
|
|
42
|
-
*
|
43
|
-
*
|
44
|
-
*
|
45
|
-
*
|
46
|
-
*
|
47
|
-
*
|
48
|
-
*
|
49
|
-
*
|
50
|
-
*
|
51
|
-
*
|
52
|
-
*
|
53
|
-
*
|
54
|
-
*
|
55
|
-
*
|
48
|
+
* America/Adak
|
49
|
+
* America/Anchorage
|
50
|
+
* America/Boise
|
51
|
+
* America/Chicago
|
52
|
+
* America/Denver
|
53
|
+
* America/Detroit
|
54
|
+
* America/Indiana/Indianapolis
|
55
|
+
* America/Indiana/Knox
|
56
|
+
* America/Indiana/Marengo
|
57
|
+
* America/Indiana/Petersburg
|
58
|
+
* America/Indiana/Tell_City
|
59
|
+
* America/Indiana/Vevay
|
60
|
+
* America/Indiana/Vincennes
|
61
|
+
* America/Indiana/Winamac
|
62
|
+
* America/Juneau
|
63
|
+
* America/Kentucky/Louisville
|
64
|
+
* America/Kentucky/Monticello
|
65
|
+
* America/Los_Angeles
|
66
|
+
* America/Menominee
|
67
|
+
* America/Metlakatla
|
68
|
+
* America/New_York
|
69
|
+
* America/Nome
|
70
|
+
* America/North_Dakota/Beulah
|
71
|
+
* America/North_Dakota/Center
|
72
|
+
* America/North_Dakota/New_Salem
|
73
|
+
* America/Phoenix
|
74
|
+
* America/Puerto_Rico
|
75
|
+
* America/Sitka
|
76
|
+
* America/St_Thomas
|
77
|
+
* America/Yakutat
|
78
|
+
* Pacific/Chuuk
|
79
|
+
* Pacific/Guam
|
80
|
+
* Pacific/Honolulu
|
81
|
+
* Pacific/Kosrae
|
82
|
+
* Pacific/Kwajalein
|
83
|
+
* Pacific/Majuro
|
84
|
+
* Pacific/Pago_Pago
|
85
|
+
* Pacific/Palau
|
86
|
+
* Pacific/Pohnpei
|
87
|
+
* Pacific/Saipan
|
88
|
+
* Pacific/Wake
|
56
89
|
|
57
90
|
<em>Note that APO/FPO zip codes will not return a known time zone offset.</em>
|
58
91
|
|
92
|
+
## Prefer raw data?
|
93
|
+
|
94
|
+
If you would prefer raw data instead of a gem, see my [ZIP Code Time Zones](https://us-west-2.console.aws.amazon.com/dataexchange/home#/products/prodview-4vcapflqwntdw) product on AWS Data Exchange to subscribe.
|
95
|
+
|
96
|
+
## Version 3 breaking changes
|
97
|
+
|
98
|
+
* APO, DPO, and FPO zip codes are no longer included, because they are non-geographic.
|
99
|
+
* Time zone offsets are now specified in seconds instead of hours.
|
100
|
+
* Time zone are now more granular. The full list of time zones is:
|
101
|
+
* America/Adak
|
102
|
+
* America/Anchorage
|
103
|
+
* America/Boise
|
104
|
+
* America/Chicago
|
105
|
+
* America/Denver
|
106
|
+
* America/Detroit
|
107
|
+
* America/Indiana/Indianapolis
|
108
|
+
* America/Indiana/Knox
|
109
|
+
* America/Indiana/Marengo
|
110
|
+
* America/Indiana/Petersburg
|
111
|
+
* America/Indiana/Tell_City
|
112
|
+
* America/Indiana/Vevay
|
113
|
+
* America/Indiana/Vincennes
|
114
|
+
* America/Indiana/Winamac
|
115
|
+
* America/Juneau
|
116
|
+
* America/Kentucky/Louisville
|
117
|
+
* America/Kentucky/Monticello
|
118
|
+
* America/Los_Angeles
|
119
|
+
* America/Menominee
|
120
|
+
* America/Metlakatla
|
121
|
+
* America/New_York
|
122
|
+
* America/Nome
|
123
|
+
* America/North_Dakota/Beulah
|
124
|
+
* America/North_Dakota/Center
|
125
|
+
* America/North_Dakota/New_Salem
|
126
|
+
* America/Phoenix
|
127
|
+
* America/Puerto_Rico
|
128
|
+
* America/Sitka
|
129
|
+
* America/St_Thomas
|
130
|
+
* America/Yakutat
|
131
|
+
* Pacific/Chuuk
|
132
|
+
* Pacific/Guam
|
133
|
+
* Pacific/Honolulu
|
134
|
+
* Pacific/Kosrae
|
135
|
+
* Pacific/Kwajalein
|
136
|
+
* Pacific/Majuro
|
137
|
+
* Pacific/Pago_Pago
|
138
|
+
* Pacific/Palau
|
139
|
+
* Pacific/Pohnpei
|
140
|
+
* Pacific/Saipan
|
141
|
+
* Pacific/Wake
|
142
|
+
|
59
143
|
## Version 2 breaking changes
|
60
144
|
|
61
145
|
Time zone names now reflect standard tz-database names.
|
@@ -76,7 +160,7 @@ Time zone names now reflect standard tz-database names.
|
|
76
160
|
|
77
161
|
## License
|
78
162
|
|
79
|
-
Copyright (c) 2015-
|
163
|
+
Copyright (c) 2015-2021 Keith Morrison <<keithm@infused.org>>
|
80
164
|
|
81
165
|
Permission is hereby granted, free of charge, to any person
|
82
166
|
obtaining a copy of this software and associated documentation
|
data/Rakefile
CHANGED
data/data/tz.data
CHANGED
Binary file
|
data/data/tzm.data
ADDED
data/lib/ziptz.rb
CHANGED
@@ -1,41 +1,33 @@
|
|
1
1
|
require 'yaml'
|
2
|
+
require 'zlib'
|
2
3
|
|
3
4
|
class Ziptz
|
4
|
-
VERSION = '
|
5
|
-
|
6
|
-
TZ_INFO = {
|
7
|
-
'0' => {name: 'APO/FPO (time zone unknown)', offset: 0},
|
8
|
-
'4' => {name: 'America/Puerto_Rico', offset: -4},
|
9
|
-
'5' => {name: 'America/New_York', offset: -5},
|
10
|
-
'6' => {name: 'America/Chicago', offset: -6},
|
11
|
-
'7' => {name: 'America/Denver', offset: -7},
|
12
|
-
'8' => {name: 'America/Los_Angeles', offset: -8},
|
13
|
-
'9' => {name: 'America/Anchorage', offset: -9},
|
14
|
-
'10' => {name: 'Pacific/Honolulu', offset: -10},
|
15
|
-
'11' => {name: 'Pacific/Pago_Pago', offset: -11},
|
16
|
-
'13' => {name: 'Pacific/Majuro', offset: 12},
|
17
|
-
'14' => {name: 'Pacific/Guam', offset: 10},
|
18
|
-
'15' => {name: 'Pacific/Palau', offset: 9},
|
19
|
-
'16' => {name: 'Pacific/Pohnpei', offset: 11},
|
20
|
-
'AZ' => {name: 'America/Phoenix', offset: -7},
|
21
|
-
'AD' => {name: 'America/Adak', offset: -10}
|
22
|
-
}.freeze
|
5
|
+
VERSION = '3.0.1'.freeze
|
23
6
|
|
24
7
|
def time_zone_name(zip)
|
25
|
-
|
8
|
+
tz_info = time_zone_info(zip)
|
9
|
+
return unless tz_info
|
10
|
+
|
11
|
+
tz_info[:tz]
|
26
12
|
end
|
27
13
|
|
28
14
|
def time_zone_offset(zip)
|
29
|
-
|
30
|
-
|
15
|
+
tz_info = time_zone_info(zip)
|
16
|
+
return unless tz_info
|
17
|
+
|
18
|
+
tzm_info = tzm[tz_info[:tz]]
|
19
|
+
tzm_info[:offset] && tzm_info[:offset].to_i
|
31
20
|
end
|
32
21
|
|
33
22
|
def time_zone_uses_dst?(zip)
|
34
|
-
|
23
|
+
tz_info = time_zone_info(zip)
|
24
|
+
return unless tz_info
|
25
|
+
|
26
|
+
tz_info[:dst]
|
35
27
|
end
|
36
28
|
|
37
29
|
def zips(tz_name)
|
38
|
-
|
30
|
+
tz.select { |_, v| v[:tz].downcase == tz_name.downcase }.keys
|
39
31
|
end
|
40
32
|
|
41
33
|
def inspect
|
@@ -44,24 +36,20 @@ class Ziptz
|
|
44
36
|
|
45
37
|
protected
|
46
38
|
|
47
|
-
def
|
48
|
-
@
|
49
|
-
end
|
50
|
-
|
51
|
-
def dst
|
52
|
-
@dst ||= load_dst_data
|
39
|
+
def tzm
|
40
|
+
@tzm ||= load_tzm_data
|
53
41
|
end
|
54
42
|
|
55
|
-
def
|
56
|
-
tz
|
43
|
+
def tz
|
44
|
+
@tz ||= load_tz_data
|
57
45
|
end
|
58
46
|
|
59
47
|
def time_zone_info(zip)
|
60
|
-
|
48
|
+
tz[zip.to_s.slice(0, 5)]
|
61
49
|
end
|
62
50
|
|
63
|
-
def
|
64
|
-
|
51
|
+
def tzm_data_path
|
52
|
+
File.join(File.dirname(__FILE__), '..', 'data', 'tzm.data')
|
65
53
|
end
|
66
54
|
|
67
55
|
def tz_data_path
|
@@ -69,20 +57,18 @@ class Ziptz
|
|
69
57
|
end
|
70
58
|
|
71
59
|
def load_tz_data
|
72
|
-
File.
|
73
|
-
|
74
|
-
|
60
|
+
uncompressed = Zlib::Inflate.inflate(File.read(tz_data_path, encoding: 'ASCII-8BIT'))
|
61
|
+
uncompressed.each_line.with_object({}) do |line, data|
|
62
|
+
zip, tz, dst = line.strip.split(':')
|
63
|
+
data[zip] = {tz: tz, dst: dst == '1'}
|
75
64
|
end
|
76
65
|
end
|
77
66
|
|
78
|
-
def
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
File.foreach(dst_data_path).with_object({}) do |line, data|
|
84
|
-
zip, dst = line.strip.split('=')
|
85
|
-
data[zip] = dst == '1'
|
67
|
+
def load_tzm_data
|
68
|
+
uncompressed = Zlib::Inflate.inflate(File.read(tzm_data_path, encoding: 'ASCII-8BIT'))
|
69
|
+
uncompressed.each_line.with_object({}) do |line, data|
|
70
|
+
tz, offset = line.strip.split(':')
|
71
|
+
data[tz] = {offset: offset}
|
86
72
|
end
|
87
73
|
end
|
88
74
|
end
|
data/spec/ziptz_spec.rb
CHANGED
@@ -74,13 +74,13 @@ RSpec.describe Ziptz do
|
|
74
74
|
describe '#time_zone_offset' do
|
75
75
|
context 'when given a 5-digit zipcode' do
|
76
76
|
it 'returns the time zone number' do
|
77
|
-
expect(ziptz.time_zone_offset('97034')).to eq(-
|
77
|
+
expect(ziptz.time_zone_offset('97034')).to eq(-28800)
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
81
|
context 'when given a 9-digit zipcode' do
|
82
82
|
it 'returns the time zone number' do
|
83
|
-
expect(ziptz.time_zone_offset('97034-1234')).to eq(-
|
83
|
+
expect(ziptz.time_zone_offset('97034-1234')).to eq(-28800)
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ziptz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keith Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Get timezone info for all 5-digit US zip codes
|
14
14
|
email: keithm@infused.org
|
@@ -25,10 +25,9 @@ files:
|
|
25
25
|
- LICENSE
|
26
26
|
- README.md
|
27
27
|
- Rakefile
|
28
|
-
- data/dst.data
|
29
28
|
- data/tz.data
|
29
|
+
- data/tzm.data
|
30
30
|
- database.yml
|
31
|
-
- lib/zip_code.rb
|
32
31
|
- lib/ziptz.rb
|
33
32
|
- spec/spec_helper.rb
|
34
33
|
- spec/ziptz_spec.rb
|
@@ -53,7 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
52
|
- !ruby/object:Gem::Version
|
54
53
|
version: '0'
|
55
54
|
requirements: []
|
56
|
-
rubygems_version: 3.
|
55
|
+
rubygems_version: 3.1.4
|
57
56
|
signing_key:
|
58
57
|
specification_version: 4
|
59
58
|
summary: TimeZone info for any 5-digit US zip code
|