ziptz 3.0.18 → 4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8584f30a48d305cf57165059fdf89bc90ff1169b540b07e4810dd08facf3bb76
4
- data.tar.gz: 974d31d4c7ab3f17e7e5bf86d875eca5b29f9d44087a09ae9b83c4694fd68945
3
+ metadata.gz: 0d3cd4dde0a56133d9db0798f044077335652c0dfcf16dbbbf4a09f1a47230bc
4
+ data.tar.gz: 20d18826c8007c4d15b418902cc467bb93e29eddf565f3a1776623dedb481fb7
5
5
  SHA512:
6
- metadata.gz: e12dbe849abc336a65894be858be518433b97b9b9ac2622581534b7da9078de2f10fe21270dfed58cee58bb7a0f2003f40f86d9d3e1dcf662cad952dd2e41e20
7
- data.tar.gz: dd9b487f4a8a868e07c39837732433662879696f12378666d700a69ed561743e47dd5a0bd607b87e381b7abe63ffe6d36ebfba61a7efc848e95fedfd7cf4f0f8
6
+ metadata.gz: b23fb49a49a372b949e6fe31af147999f241a706744654613c576d00c2e9c4f1d65bf50c9d0224089479a6361096a6c77bcd1b54ff21d341365606bcd9db0f95
7
+ data.tar.gz: aff97067607af0b0d3aff3313761cea8e38dbabf89545eeae0b45da826e7aa794dff58245353ec8885d8dfb823242eb99d27196ffe326bf149ef2c6456060d25
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
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>July 2023</b>.</i>
9
+ <i>ZIP codes are up to date as of <b>December 2023</b>.</i>
10
10
 
11
11
  ## Compatibility
12
12
 
data/data/tz.data CHANGED
Binary file
data/data/tz.db ADDED
Binary file
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ class Ziptz
2
+ VERSION = '4.0.1'.freeze
3
+ end
data/lib/ziptz.rb CHANGED
@@ -1,37 +1,42 @@
1
- require 'yaml'
2
- require 'zlib'
1
+ require 'sqlite3'
2
+ require 'version'
3
3
 
4
4
  class Ziptz
5
- VERSION = '3.0.18'.freeze
6
-
7
5
  def self.instance
8
6
  @instance ||= new
9
7
  end
10
8
 
11
- def time_zone_name(zip)
12
- tz_info = time_zone_info(zip)
13
- return unless tz_info
9
+ def db
10
+ @db ||= begin
11
+ db = SQLite3::Database.open(tz_data_path)
12
+ db.results_as_hash = true
13
+ db
14
+ end
15
+ end
14
16
 
15
- tz_info[:tz]
17
+ def time_zone_name(zip)
18
+ time_zone_info(zip)&.dig('time_zone')
16
19
  end
17
20
 
18
21
  def time_zone_offset(zip)
19
- tz_info = time_zone_info(zip)
20
- return unless tz_info
21
-
22
- tzm_info = tzm[tz_info[:tz]]
23
- tzm_info[:offset] && tzm_info[:offset].to_i
22
+ time_zone_info(zip)&.dig('offset')
24
23
  end
25
24
 
26
25
  def time_zone_uses_dst?(zip)
27
26
  tz_info = time_zone_info(zip)
28
27
  return unless tz_info
29
28
 
30
- tz_info[:dst]
29
+ tz_info['observes_dst'] == 1
31
30
  end
32
31
 
33
32
  def zips(tz_name)
34
- tz.select { |_, v| v[:tz].downcase == tz_name.downcase }.keys
33
+ sql = <<-SQL
34
+ select zip_code
35
+ from zip_codes
36
+ where time_zone = ?
37
+ order by zip_code
38
+ SQL
39
+ db.execute(sql, tz_name).map { |row| row['zip_code'] }
35
40
  end
36
41
 
37
42
  def inspect
@@ -40,53 +45,11 @@ class Ziptz
40
45
 
41
46
  protected
42
47
 
43
- def tzm
44
- @tzm ||= load_tzm_data
45
- end
46
-
47
- def lazy_tz
48
- @lazy_tz ||= lazy_load_tz_data
49
- end
50
-
51
- def tz
52
- @tz ||= load_tz_data
53
- end
54
-
55
48
  def time_zone_info(zip)
56
- if (data = lazy_tz[zip.to_s.slice(0, 5)])
57
- _, tz, dst = data.strip.split('|')
58
- {tz: tz, dst: dst == '1'}
59
- end
60
- end
61
-
62
- def tzm_data_path
63
- File.join(File.dirname(__FILE__), '..', 'data', 'tzm.data')
49
+ db.get_first_row('select * from zip_codes where zip_code = ? limit 1', zip[0, 5])
64
50
  end
65
51
 
66
52
  def tz_data_path
67
- File.join(File.dirname(__FILE__), '..', 'data', 'tz.data')
68
- end
69
-
70
- def lazy_load_tz_data
71
- uncompressed = Zlib::Inflate.inflate(File.read(tz_data_path, encoding: 'ASCII-8BIT'))
72
- uncompressed.each_line.with_object({}) do |line, data|
73
- data[line.slice(0, 5)] = line
74
- end
75
- end
76
-
77
- def load_tz_data
78
- uncompressed = Zlib::Inflate.inflate(File.read(tz_data_path, encoding: 'ASCII-8BIT'))
79
- uncompressed.each_line.with_object({}) do |line, data|
80
- zip, tz, dst = line.strip.split('|')
81
- data[zip] = {tz: tz, dst: dst == '1'}
82
- end
83
- end
84
-
85
- def load_tzm_data
86
- uncompressed = Zlib::Inflate.inflate(File.read(tzm_data_path, encoding: 'ASCII-8BIT'))
87
- uncompressed.each_line.with_object({}) do |line, data|
88
- tz, offset = line.strip.split('|')
89
- data[tz] = {offset: offset}
90
- end
53
+ File.join(File.dirname(__FILE__), '..', 'data', 'tz.db')
91
54
  end
92
55
  end
data/ziptz.gemspec CHANGED
@@ -1,4 +1,6 @@
1
- require File.expand_path('lib/ziptz')
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
3
+ require 'version'
2
4
 
3
5
  Gem::Specification.new do |s|
4
6
  s.name = 'ziptz'
@@ -17,4 +19,5 @@ Gem::Specification.new do |s|
17
19
  s.require_paths = ['lib']
18
20
  s.required_ruby_version = '>= 2.0.0'
19
21
  s.metadata['rubygems_mfa_required'] = 'true'
22
+ s.add_dependency 'sqlite3', '~> 1.6'
20
23
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ziptz
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.18
4
+ version: 4.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: 2023-10-02 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2023-12-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sqlite3
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
13
27
  description: Get timezone info for all 5-digit US zip codes
14
28
  email: keithm@infused.org
15
29
  executables: []
@@ -21,7 +35,9 @@ files:
21
35
  - LICENSE
22
36
  - README.md
23
37
  - data/tz.data
38
+ - data/tz.db
24
39
  - data/tzm.data
40
+ - lib/version.rb
25
41
  - lib/ziptz.rb
26
42
  - spec/spec_helper.rb
27
43
  - spec/ziptz_spec.rb
@@ -47,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
47
63
  - !ruby/object:Gem::Version
48
64
  version: '0'
49
65
  requirements: []
50
- rubygems_version: 3.4.10
66
+ rubygems_version: 3.4.21
51
67
  signing_key:
52
68
  specification_version: 4
53
69
  summary: TimeZone info for any 5-digit US zip code