maxmind-db 1.3.2 → 1.5.0

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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/README.md +3 -3
  4. data/lib/maxmind/db/decoder.rb +198 -63
  5. data/lib/maxmind/db/file_reader.rb +5 -0
  6. data/lib/maxmind/db/memory_reader.rb +18 -1
  7. data/lib/maxmind/db.rb +39 -5
  8. metadata +46 -79
  9. data/Gemfile +0 -5
  10. data/Gemfile.lock +0 -58
  11. data/README.dev.md +0 -4
  12. data/Rakefile +0 -15
  13. data/bin/mmdb-benchmark.rb +0 -64
  14. data/maxmind-db.gemspec +0 -28
  15. data/test/data/LICENSE +0 -4
  16. data/test/data/MaxMind-DB-spec.md +0 -574
  17. data/test/data/README.md +0 -4
  18. data/test/data/bad-data/README.md +0 -7
  19. data/test/data/bad-data/libmaxminddb/libmaxminddb-offset-integer-overflow.mmdb +0 -0
  20. data/test/data/bad-data/maxminddb-golang/cyclic-data-structure.mmdb +0 -0
  21. data/test/data/bad-data/maxminddb-golang/invalid-bytes-length.mmdb +0 -1
  22. data/test/data/bad-data/maxminddb-golang/invalid-data-record-offset.mmdb +0 -0
  23. data/test/data/bad-data/maxminddb-golang/invalid-map-key-length.mmdb +0 -0
  24. data/test/data/bad-data/maxminddb-golang/invalid-string-length.mmdb +0 -1
  25. data/test/data/bad-data/maxminddb-golang/metadata-is-an-uint128.mmdb +0 -1
  26. data/test/data/bad-data/maxminddb-golang/unexpected-bytes.mmdb +0 -0
  27. data/test/data/bad-data/maxminddb-python/bad-unicode-in-map-key.mmdb +0 -0
  28. data/test/data/perltidyrc +0 -12
  29. data/test/data/source-data/GeoIP2-Anonymous-IP-Test.json +0 -49
  30. data/test/data/source-data/GeoIP2-City-Test.json +0 -12885
  31. data/test/data/source-data/GeoIP2-Connection-Type-Test.json +0 -122
  32. data/test/data/source-data/GeoIP2-Country-Test.json +0 -15904
  33. data/test/data/source-data/GeoIP2-DensityIncome-Test.json +0 -14
  34. data/test/data/source-data/GeoIP2-Domain-Test.json +0 -452
  35. data/test/data/source-data/GeoIP2-Enterprise-Test.json +0 -745
  36. data/test/data/source-data/GeoIP2-ISP-Test.json +0 -12605
  37. data/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json +0 -2205
  38. data/test/data/source-data/GeoIP2-Static-IP-Score-Test.json +0 -2132
  39. data/test/data/source-data/GeoIP2-User-Count-Test.json +0 -2837
  40. data/test/data/source-data/GeoLite2-ASN-Test.json +0 -4120
  41. data/test/data/source-data/GeoLite2-City-Test.json +0 -12804
  42. data/test/data/source-data/GeoLite2-Country-Test.json +0 -11280
  43. data/test/data/source-data/README +0 -15
  44. data/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb +0 -0
  45. data/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb +0 -0
  46. data/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb +0 -0
  47. data/test/data/test-data/GeoIP2-City-Test.mmdb +0 -0
  48. data/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb +0 -0
  49. data/test/data/test-data/GeoIP2-Country-Test.mmdb +0 -0
  50. data/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb +0 -0
  51. data/test/data/test-data/GeoIP2-Domain-Test.mmdb +0 -0
  52. data/test/data/test-data/GeoIP2-Enterprise-Test.mmdb +0 -0
  53. data/test/data/test-data/GeoIP2-ISP-Test.mmdb +0 -0
  54. data/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +0 -0
  55. data/test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb +0 -0
  56. data/test/data/test-data/GeoIP2-User-Count-Test.mmdb +0 -0
  57. data/test/data/test-data/GeoLite2-ASN-Test.mmdb +0 -0
  58. data/test/data/test-data/GeoLite2-City-Test.mmdb +0 -0
  59. data/test/data/test-data/GeoLite2-Country-Test.mmdb +0 -0
  60. data/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb +0 -0
  61. data/test/data/test-data/MaxMind-DB-string-value-entries.mmdb +0 -0
  62. data/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb +0 -0
  63. data/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb +0 -0
  64. data/test/data/test-data/MaxMind-DB-test-decoder.mmdb +0 -0
  65. data/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb +0 -0
  66. data/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb +0 -0
  67. data/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb +0 -0
  68. data/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb +0 -0
  69. data/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb +0 -0
  70. data/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb +0 -0
  71. data/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb +0 -0
  72. data/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb +0 -0
  73. data/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb +0 -0
  74. data/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb +0 -0
  75. data/test/data/test-data/MaxMind-DB-test-nested.mmdb +0 -0
  76. data/test/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb +0 -0
  77. data/test/data/test-data/README.md +0 -26
  78. data/test/data/test-data/maps-with-pointers.raw +0 -0
  79. data/test/data/test-data/write-test-data.pl +0 -695
  80. data/test/data/tidyall.ini +0 -5
  81. data/test/mmdb_util.rb +0 -26
  82. data/test/test_decoder.rb +0 -241
  83. data/test/test_reader.rb +0 -547
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maxmind-db
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Storey
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-04-03 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: minitest
@@ -51,6 +51,20 @@ dependencies:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rubocop-minitest
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: rubocop-performance
56
70
  requirement: !ruby/object:Gem::Requirement
@@ -65,6 +79,34 @@ dependencies:
65
79
  - - ">="
66
80
  - !ruby/object:Gem::Version
67
81
  version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rubocop-rake
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: rubocop-thread_safety
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
68
110
  description: A gem for reading MaxMind DB files. MaxMind DB is a binary file format
69
111
  that stores data indexed by IP address subnets (IPv4 or IPv6).
70
112
  email: support@maxmind.com
@@ -73,90 +115,15 @@ extensions: []
73
115
  extra_rdoc_files: []
74
116
  files:
75
117
  - CHANGELOG.md
76
- - Gemfile
77
- - Gemfile.lock
78
118
  - LICENSE-APACHE
79
119
  - LICENSE-MIT
80
- - README.dev.md
81
120
  - README.md
82
- - Rakefile
83
- - bin/mmdb-benchmark.rb
84
121
  - lib/maxmind/db.rb
85
122
  - lib/maxmind/db/decoder.rb
86
123
  - lib/maxmind/db/errors.rb
87
124
  - lib/maxmind/db/file_reader.rb
88
125
  - lib/maxmind/db/memory_reader.rb
89
126
  - lib/maxmind/db/metadata.rb
90
- - maxmind-db.gemspec
91
- - test/data/LICENSE
92
- - test/data/MaxMind-DB-spec.md
93
- - test/data/README.md
94
- - test/data/bad-data/README.md
95
- - test/data/bad-data/libmaxminddb/libmaxminddb-offset-integer-overflow.mmdb
96
- - test/data/bad-data/maxminddb-golang/cyclic-data-structure.mmdb
97
- - test/data/bad-data/maxminddb-golang/invalid-bytes-length.mmdb
98
- - test/data/bad-data/maxminddb-golang/invalid-data-record-offset.mmdb
99
- - test/data/bad-data/maxminddb-golang/invalid-map-key-length.mmdb
100
- - test/data/bad-data/maxminddb-golang/invalid-string-length.mmdb
101
- - test/data/bad-data/maxminddb-golang/metadata-is-an-uint128.mmdb
102
- - test/data/bad-data/maxminddb-golang/unexpected-bytes.mmdb
103
- - test/data/bad-data/maxminddb-python/bad-unicode-in-map-key.mmdb
104
- - test/data/perltidyrc
105
- - test/data/source-data/GeoIP2-Anonymous-IP-Test.json
106
- - test/data/source-data/GeoIP2-City-Test.json
107
- - test/data/source-data/GeoIP2-Connection-Type-Test.json
108
- - test/data/source-data/GeoIP2-Country-Test.json
109
- - test/data/source-data/GeoIP2-DensityIncome-Test.json
110
- - test/data/source-data/GeoIP2-Domain-Test.json
111
- - test/data/source-data/GeoIP2-Enterprise-Test.json
112
- - test/data/source-data/GeoIP2-ISP-Test.json
113
- - test/data/source-data/GeoIP2-Precision-Enterprise-Test.json
114
- - test/data/source-data/GeoIP2-Static-IP-Score-Test.json
115
- - test/data/source-data/GeoIP2-User-Count-Test.json
116
- - test/data/source-data/GeoLite2-ASN-Test.json
117
- - test/data/source-data/GeoLite2-City-Test.json
118
- - test/data/source-data/GeoLite2-Country-Test.json
119
- - test/data/source-data/README
120
- - test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb
121
- - test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb
122
- - test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb
123
- - test/data/test-data/GeoIP2-City-Test.mmdb
124
- - test/data/test-data/GeoIP2-Connection-Type-Test.mmdb
125
- - test/data/test-data/GeoIP2-Country-Test.mmdb
126
- - test/data/test-data/GeoIP2-DensityIncome-Test.mmdb
127
- - test/data/test-data/GeoIP2-Domain-Test.mmdb
128
- - test/data/test-data/GeoIP2-Enterprise-Test.mmdb
129
- - test/data/test-data/GeoIP2-ISP-Test.mmdb
130
- - test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb
131
- - test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb
132
- - test/data/test-data/GeoIP2-User-Count-Test.mmdb
133
- - test/data/test-data/GeoLite2-ASN-Test.mmdb
134
- - test/data/test-data/GeoLite2-City-Test.mmdb
135
- - test/data/test-data/GeoLite2-Country-Test.mmdb
136
- - test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb
137
- - test/data/test-data/MaxMind-DB-string-value-entries.mmdb
138
- - test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb
139
- - test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb
140
- - test/data/test-data/MaxMind-DB-test-decoder.mmdb
141
- - test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb
142
- - test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb
143
- - test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb
144
- - test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb
145
- - test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb
146
- - test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb
147
- - test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb
148
- - test/data/test-data/MaxMind-DB-test-mixed-24.mmdb
149
- - test/data/test-data/MaxMind-DB-test-mixed-28.mmdb
150
- - test/data/test-data/MaxMind-DB-test-mixed-32.mmdb
151
- - test/data/test-data/MaxMind-DB-test-nested.mmdb
152
- - test/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb
153
- - test/data/test-data/README.md
154
- - test/data/test-data/maps-with-pointers.raw
155
- - test/data/test-data/write-test-data.pl
156
- - test/data/tidyall.ini
157
- - test/mmdb_util.rb
158
- - test/test_decoder.rb
159
- - test/test_reader.rb
160
127
  homepage: https://github.com/maxmind/MaxMind-DB-Reader-ruby
161
128
  licenses:
162
129
  - Apache-2.0
@@ -175,14 +142,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
175
142
  requirements:
176
143
  - - ">="
177
144
  - !ruby/object:Gem::Version
178
- version: '3.0'
145
+ version: '3.2'
179
146
  required_rubygems_version: !ruby/object:Gem::Requirement
180
147
  requirements:
181
148
  - - ">="
182
149
  - !ruby/object:Gem::Version
183
150
  version: '0'
184
151
  requirements: []
185
- rubygems_version: 3.6.2
152
+ rubygems_version: 4.0.16
186
153
  specification_version: 4
187
154
  summary: A gem for reading MaxMind DB files.
188
155
  test_files: []
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec
data/Gemfile.lock DELETED
@@ -1,58 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- maxmind-db (1.3.2)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- ast (2.4.3)
10
- json (2.10.2)
11
- language_server-protocol (3.17.0.4)
12
- lint_roller (1.1.0)
13
- minitest (5.25.5)
14
- parallel (1.26.3)
15
- parser (3.3.7.4)
16
- ast (~> 2.4.1)
17
- racc
18
- prism (1.4.0)
19
- racc (1.8.1)
20
- rainbow (3.1.1)
21
- rake (13.2.1)
22
- regexp_parser (2.10.0)
23
- rubocop (1.75.2)
24
- json (~> 2.3)
25
- language_server-protocol (~> 3.17.0.2)
26
- lint_roller (~> 1.1.0)
27
- parallel (~> 1.10)
28
- parser (>= 3.3.0.2)
29
- rainbow (>= 2.2.2, < 4.0)
30
- regexp_parser (>= 2.9.3, < 3.0)
31
- rubocop-ast (>= 1.44.0, < 2.0)
32
- ruby-progressbar (~> 1.7)
33
- unicode-display_width (>= 2.4.0, < 4.0)
34
- rubocop-ast (1.44.0)
35
- parser (>= 3.3.7.2)
36
- prism (~> 1.4)
37
- rubocop-performance (1.25.0)
38
- lint_roller (~> 1.1)
39
- rubocop (>= 1.75.0, < 2.0)
40
- rubocop-ast (>= 1.38.0, < 2.0)
41
- ruby-progressbar (1.13.0)
42
- unicode-display_width (3.1.4)
43
- unicode-emoji (~> 4.0, >= 4.0.4)
44
- unicode-emoji (4.0.4)
45
-
46
- PLATFORMS
47
- ruby
48
- x86_64-linux
49
-
50
- DEPENDENCIES
51
- maxmind-db!
52
- minitest
53
- rake
54
- rubocop
55
- rubocop-performance
56
-
57
- BUNDLED WITH
58
- 2.6.2
data/README.dev.md DELETED
@@ -1,4 +0,0 @@
1
- # How to release
2
-
3
- See
4
- [here](https://github.com/maxmind/minfraud-api-ruby/blob/main/README.dev.md).
data/Rakefile DELETED
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
- require 'rake/testtask'
5
- require 'rubocop/rake_task'
6
-
7
- Rake::TestTask.new do |t|
8
- t.libs << 'test'
9
- end
10
-
11
- RuboCop::RakeTask.new
12
-
13
- desc 'Run tests and RuboCop'
14
- task default: :test
15
- task default: :rubocop
@@ -1,64 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'maxmind/db'
5
-
6
- def main
7
- args = parse_args
8
- return false if args.nil?
9
-
10
- reader = MaxMind::DB.new(args[:database], mode: MaxMind::DB::MODE_MEMORY)
11
- benchmark(reader, args[:ip_file])
12
- true
13
- end
14
-
15
- def parse_args
16
- if ARGV.length != 2
17
- print_usage
18
- return nil
19
- end
20
-
21
- database = ARGV[0]
22
- ip_file = ARGV[1]
23
-
24
- {
25
- database: database,
26
- ip_file: ip_file,
27
- }
28
- end
29
-
30
- def print_usage
31
- # rubocop:disable Style/StderrPuts
32
- $stderr.puts "Usage: #{$PROGRAM_NAME} <MMDB file> <IP file>"
33
- $stderr.puts
34
- $stderr.puts 'Benchmark by reading IPs from the IP file and looking up each one in the MMDB file.'
35
- # rubocop:enable Style/StderrPuts
36
- end
37
-
38
- def benchmark(reader, file)
39
- n = 0
40
- count = 200_000
41
- start = Time.now.to_f
42
- File.open(file) do |fh|
43
- fh.each do |line|
44
- n += 1
45
- line.strip!
46
-
47
- reader.get(line)
48
-
49
- write_status(start, n) if n % 1000 == 0
50
- break if n == count
51
- end
52
- end
53
- end
54
-
55
- def write_status(start, count)
56
- now = Time.now.to_f
57
- elapsed = now - start
58
- rate = 1.0 * count / elapsed
59
- puts format('%d @ %.2f lookups per second (%d seconds elapsed)', count, rate, elapsed)
60
- end
61
-
62
- exit 0 if main
63
-
64
- exit 1
data/maxmind-db.gemspec DELETED
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Gem::Specification.new do |s|
4
- s.authors = ['William Storey']
5
- s.files = Dir['**/*'].difference(Dir['.github/**/*', 'dev-bin/**/*'])
6
- s.name = 'maxmind-db'
7
- s.summary = 'A gem for reading MaxMind DB files.'
8
- s.version = '1.3.2'
9
-
10
- s.description = 'A gem for reading MaxMind DB files. MaxMind DB is a binary file format that stores data indexed by IP address subnets (IPv4 or IPv6).'
11
- s.email = 'support@maxmind.com'
12
- s.homepage = 'https://github.com/maxmind/MaxMind-DB-Reader-ruby'
13
- s.licenses = ['Apache-2.0', 'MIT']
14
- s.metadata = {
15
- 'bug_tracker_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby/issues',
16
- 'changelog_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby/blob/main/CHANGELOG.md',
17
- 'documentation_uri' => 'https://www.rubydoc.info/gems/maxmind-db',
18
- 'homepage_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby',
19
- 'source_code_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby',
20
- 'rubygems_mfa_required' => 'true',
21
- }
22
- s.required_ruby_version = '>= 3.0'
23
-
24
- s.add_development_dependency 'minitest'
25
- s.add_development_dependency 'rake'
26
- s.add_development_dependency 'rubocop'
27
- s.add_development_dependency 'rubocop-performance'
28
- end
data/test/data/LICENSE DELETED
@@ -1,4 +0,0 @@
1
- This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
2
- Unported License. To view a copy of this license, visit
3
- http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative
4
- Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.