ziptz 3.0.17 → 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: b82917d057946bf70db6f984ff91943c15d6ec1431ab88e42e69eff7bad61581
4
- data.tar.gz: 567412cce76d568b68342e74da46db7cc5c6d8ed777d617949c3dd88acf44cf7
3
+ metadata.gz: 0d3cd4dde0a56133d9db0798f044077335652c0dfcf16dbbbf4a09f1a47230bc
4
+ data.tar.gz: 20d18826c8007c4d15b418902cc467bb93e29eddf565f3a1776623dedb481fb7
5
5
  SHA512:
6
- metadata.gz: 25c13ad1068a69a2edb56c1acbb5d975a639b1a557670e8ee4e290109b6e5e96cb4ccc2906539eabee831fef0a1d2d702a4aa6c2af85f8f80ce73859e54b17f2
7
- data.tar.gz: bf30b77b87008cd44521949b59bcdfe8244c535851c9b41bd7deca8828916171e87cad6ad313458e44a5ad96405350b20cfc299d1f4fcabd1ea5adae41affa6b
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.17'.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,39 +45,11 @@ class Ziptz
40
45
 
41
46
  protected
42
47
 
43
- def tzm
44
- @tzm ||= load_tzm_data
45
- end
46
-
47
- def tz
48
- @tz ||= load_tz_data
49
- end
50
-
51
48
  def time_zone_info(zip)
52
- tz[zip.to_s.slice(0, 5)]
53
- end
54
-
55
- def tzm_data_path
56
- 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])
57
50
  end
58
51
 
59
52
  def tz_data_path
60
- File.join(File.dirname(__FILE__), '..', 'data', 'tz.data')
61
- end
62
-
63
- def load_tz_data
64
- uncompressed = Zlib::Inflate.inflate(File.read(tz_data_path, encoding: 'ASCII-8BIT'))
65
- uncompressed.each_line.with_object({}) do |line, data|
66
- zip, tz, dst = line.strip.split('|')
67
- data[zip] = {tz: tz, dst: dst == '1'}
68
- end
69
- end
70
-
71
- def load_tzm_data
72
- uncompressed = Zlib::Inflate.inflate(File.read(tzm_data_path, encoding: 'ASCII-8BIT'))
73
- uncompressed.each_line.with_object({}) do |line, data|
74
- tz, offset = line.strip.split('|')
75
- data[tz] = {offset: offset}
76
- end
53
+ File.join(File.dirname(__FILE__), '..', 'data', 'tz.db')
77
54
  end
78
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.17
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-07-03 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.14
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