maxmind-db 1.0.0.beta → 1.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -1
- data/README.dev.md +7 -4
- data/README.md +18 -1
- data/bin/mmdb-benchmark.rb +1 -1
- data/lib/maxmind/db.rb +3 -0
- data/lib/maxmind/db/decoder.rb +10 -9
- data/lib/maxmind/db/memory_reader.rb +6 -0
- data/maxmind-db.gemspec +5 -5
- data/test/test_decoder.rb +7 -7
- data/test/test_reader.rb +19 -19
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 604697b9d2de00a32fec3ee2b84c53703f532ecf708ca6cfcd4898fa934d830e
|
4
|
+
data.tar.gz: cdaeb5d99ca07f8c9f6af0354dc23fb3f8678a40e0ea67fe74b7b7dcaabc7ec5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3939f3025d4a715537d6284ac49cfa691bf733711afd6143ec73e586aec96cbcf717115c340214903fd4a8bcc1c4b8c4973d0fa9517491b2c48c5d710cdc9e87
|
7
|
+
data.tar.gz: 54dbe0bebe152e151234b0b0026492d38a80858174c3342d12ff665026d858295b29434d3ea7c8ea56b3b7c669b0d2f921c018b7dba9c16aad996143f9c66ede
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## 0.0
|
3
|
+
## 1.0.0 - 2019-01-04
|
4
|
+
* We no longer include the database's buffer in inspect output. This avoids
|
5
|
+
showing excessive output when creating a memory reader in irb. Reported
|
6
|
+
by Wojciech Wnętrzak. GitHub #6.
|
7
|
+
|
8
|
+
## 1.0.0.beta - 2018-12-24
|
4
9
|
* Initial implementation.
|
data/README.dev.md
CHANGED
@@ -2,12 +2,15 @@
|
|
2
2
|
* Update changelog and set release date
|
3
3
|
* Bump version in `maxmind-db.gemspec`
|
4
4
|
* Commit: `git commit -m v1.0.0`
|
5
|
-
* Push: `git push`
|
6
5
|
* Tag: `git tag -a v1.0.0 -m v1.0.0`
|
7
|
-
*
|
8
|
-
* Create `.gem` file: `gem build maxmind-db.
|
6
|
+
* Clean up to be sure nothing stray gets into gem: `git clean -dxff`
|
7
|
+
* Create `.gem` file: `gem build maxmind-db.gemspec`
|
9
8
|
* Complete prerequisites (see below)
|
10
|
-
* Upload to rubygems.org: `gem push
|
9
|
+
* Upload to rubygems.org: `gem push maxmind-db-1.0.0.gem`
|
10
|
+
* Push: `git push`
|
11
|
+
* Push tag: `git push --tags`
|
12
|
+
* Double check it looks okay at https://rubygems.org/gems/maxmind-db and
|
13
|
+
https://www.rubydoc.info/gems/maxmind-db
|
11
14
|
|
12
15
|
|
13
16
|
# Prerequisites
|
data/README.md
CHANGED
@@ -6,6 +6,20 @@ This is the Ruby API for reading [MaxMind
|
|
6
6
|
DB](https://maxmind.github.io/MaxMind-DB/) files. MaxMind DB is a binary
|
7
7
|
file format that stores data indexed by IP address subnets (IPv4 or IPv6).
|
8
8
|
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
```
|
13
|
+
gem install maxmind-db
|
14
|
+
```
|
15
|
+
|
16
|
+
Or from source:
|
17
|
+
|
18
|
+
```
|
19
|
+
gem build maxmind-db.spec
|
20
|
+
gem install ./maxmind-db-xxx.gem
|
21
|
+
```
|
22
|
+
|
9
23
|
## Usage
|
10
24
|
|
11
25
|
```ruby
|
@@ -24,6 +38,9 @@ end
|
|
24
38
|
reader.close
|
25
39
|
```
|
26
40
|
|
41
|
+
For more information see the
|
42
|
+
[documentation](https://www.rubydoc.info/gems/maxmind-db).
|
43
|
+
|
27
44
|
## Requirements
|
28
45
|
|
29
46
|
This code requires Ruby version 2.3 or higher. Older versions may work, but
|
@@ -48,7 +65,7 @@ This library uses [Semantic Versioning](https://semver.org/).
|
|
48
65
|
|
49
66
|
## Copyright and License
|
50
67
|
|
51
|
-
This software is Copyright (c) 2018 by MaxMind, Inc.
|
68
|
+
This software is Copyright (c) 2018 - 2019 by MaxMind, Inc.
|
52
69
|
|
53
70
|
This is free software, licensed under the [Apache License, Version
|
54
71
|
2.0](LICENSE-APACHE) or the [MIT License](LICENSE-MIT), at your option.
|
data/bin/mmdb-benchmark.rb
CHANGED
data/lib/maxmind/db.rb
CHANGED
@@ -167,6 +167,7 @@ module MaxMind # :nodoc:
|
|
167
167
|
node_count = @node_count
|
168
168
|
bit_count.times do |i|
|
169
169
|
break if node >= node_count
|
170
|
+
|
170
171
|
c = packed[i >> 3].ord
|
171
172
|
bit = 1 & (c >> 7 - (i % 8))
|
172
173
|
node = read_node(node, bit)
|
@@ -187,6 +188,7 @@ module MaxMind # :nodoc:
|
|
187
188
|
node = 0
|
188
189
|
96.times do
|
189
190
|
break if node >= @metadata.node_count
|
191
|
+
|
190
192
|
node = read_node(node, 0)
|
191
193
|
end
|
192
194
|
|
@@ -250,6 +252,7 @@ module MaxMind # :nodoc:
|
|
250
252
|
index = @size - METADATA_START_MARKER_LENGTH
|
251
253
|
while index >= stop_index
|
252
254
|
return index + METADATA_START_MARKER_LENGTH if at_metadata?(index)
|
255
|
+
|
253
256
|
index -= 1
|
254
257
|
end
|
255
258
|
|
data/lib/maxmind/db/decoder.rb
CHANGED
@@ -58,6 +58,7 @@ module MaxMind # :nodoc:
|
|
58
58
|
|
59
59
|
def verify_size(expected, actual)
|
60
60
|
return if expected == actual
|
61
|
+
|
61
62
|
raise InvalidDatabaseError,
|
62
63
|
'The MaxMind DB file\'s data section contains bad data (unknown data type or corrupt data)'.freeze
|
63
64
|
end
|
@@ -152,15 +153,15 @@ module MaxMind # :nodoc:
|
|
152
153
|
end
|
153
154
|
|
154
155
|
TYPE_DECODER = {
|
155
|
-
1
|
156
|
-
2
|
157
|
-
3
|
158
|
-
4
|
159
|
-
5
|
160
|
-
6
|
161
|
-
7
|
162
|
-
8
|
163
|
-
9
|
156
|
+
1 => :decode_pointer,
|
157
|
+
2 => :decode_utf8_string,
|
158
|
+
3 => :decode_double,
|
159
|
+
4 => :decode_bytes,
|
160
|
+
5 => :decode_uint16,
|
161
|
+
6 => :decode_uint32,
|
162
|
+
7 => :decode_map,
|
163
|
+
8 => :decode_int32,
|
164
|
+
9 => :decode_uint64,
|
164
165
|
10 => :decode_uint128,
|
165
166
|
11 => :decode_array,
|
166
167
|
14 => :decode_boolean,
|
@@ -14,6 +14,12 @@ module MaxMind # :nodoc:
|
|
14
14
|
|
15
15
|
attr_reader :size
|
16
16
|
|
17
|
+
# Override to not show @buf in inspect to avoid showing it in irb.
|
18
|
+
def inspect
|
19
|
+
s = "#<#{self.class.name}:0x#{self.class.object_id.to_s(16)} "
|
20
|
+
s << '@size=' << @size.inspect << '>'
|
21
|
+
end
|
22
|
+
|
17
23
|
def close; end
|
18
24
|
|
19
25
|
def read(offset, size)
|
data/maxmind-db.gemspec
CHANGED
@@ -3,17 +3,17 @@ Gem::Specification.new do |s|
|
|
3
3
|
s.files = Dir['**/*']
|
4
4
|
s.name = 'maxmind-db'
|
5
5
|
s.summary = 'A gem for reading MaxMind DB files.'
|
6
|
-
s.version = '1.0.0
|
6
|
+
s.version = '1.0.0'
|
7
7
|
|
8
8
|
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).'
|
9
9
|
s.email = 'wstorey@maxmind.com'
|
10
10
|
s.homepage = 'https://github.com/maxmind/MaxMind-DB-Reader-ruby'
|
11
11
|
s.licenses = ['Apache-2.0', 'MIT']
|
12
12
|
s.metadata = {
|
13
|
-
'bug_tracker_uri'
|
14
|
-
'changelog_uri'
|
13
|
+
'bug_tracker_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby/issues',
|
14
|
+
'changelog_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby/blob/master/CHANGELOG.md',
|
15
15
|
'documentation_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby',
|
16
|
-
'homepage_uri'
|
17
|
-
'source_code_uri'
|
16
|
+
'homepage_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby',
|
17
|
+
'source_code_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby',
|
18
18
|
}
|
19
19
|
end
|
data/test/test_decoder.rb
CHANGED
@@ -96,15 +96,15 @@ class DecoderTest < Minitest::Test # :nodoc:
|
|
96
96
|
'languages' => %w[en zh]
|
97
97
|
},
|
98
98
|
MMDBUtil.make_metadata_map(28) => {
|
99
|
-
'node_count'
|
100
|
-
'record_size'
|
101
|
-
'ip_version'
|
102
|
-
'database_type'
|
103
|
-
'languages'
|
99
|
+
'node_count' => 0,
|
100
|
+
'record_size' => 28,
|
101
|
+
'ip_version' => 4,
|
102
|
+
'database_type' => 'test',
|
103
|
+
'languages' => ['en'],
|
104
104
|
'binary_format_major_version' => 2,
|
105
105
|
'binary_format_minor_version' => 0,
|
106
|
-
'build_epoch'
|
107
|
-
'description'
|
106
|
+
'build_epoch' => 0,
|
107
|
+
'description' => 'hi',
|
108
108
|
},
|
109
109
|
}
|
110
110
|
validate_type_decoding('maps', maps)
|
data/test/test_reader.rb
CHANGED
@@ -41,7 +41,7 @@ class ReaderTest < Minitest::Test # :nodoc:
|
|
41
41
|
assert_equal(
|
42
42
|
{
|
43
43
|
'mapX' => {
|
44
|
-
'arrayX'
|
44
|
+
'arrayX' => [7, 8, 9],
|
45
45
|
'utf8_stringX' => 'hello',
|
46
46
|
},
|
47
47
|
},
|
@@ -111,7 +111,7 @@ class ReaderTest < Minitest::Test # :nodoc:
|
|
111
111
|
e = assert_raises ArgumentError do
|
112
112
|
reader.get('not_ip')
|
113
113
|
end
|
114
|
-
|
114
|
+
assert(e.message.match(/invalid address/))
|
115
115
|
reader.close
|
116
116
|
end
|
117
117
|
|
@@ -270,28 +270,28 @@ class ReaderTest < Minitest::Test # :nodoc:
|
|
270
270
|
{
|
271
271
|
record_size: 24,
|
272
272
|
# Left record + right record
|
273
|
-
node_bytes:
|
274
|
-
left:
|
275
|
-
right:
|
276
|
-
check_left:
|
273
|
+
node_bytes: "\xab\xcd\xef".b + "\xbc\xfe\xfa".b,
|
274
|
+
left: 11_259_375,
|
275
|
+
right: 12_386_042,
|
276
|
+
check_left: "\x00\xab\xcd\xef".b.unpack('N')[0],
|
277
277
|
check_right: "\x00\xbc\xfe\xfa".b.unpack('N')[0],
|
278
278
|
},
|
279
279
|
{
|
280
280
|
record_size: 28,
|
281
281
|
# Left record (part) + middle byte + right record (part)
|
282
|
-
node_bytes:
|
283
|
-
left:
|
284
|
-
right:
|
285
|
-
check_left:
|
282
|
+
node_bytes: "\xab\xcd\xef".b + "\x12".b + "\xfd\xdc\xfa".b,
|
283
|
+
left: 28_036_591,
|
284
|
+
right: 50_191_610,
|
285
|
+
check_left: "\x01\xab\xcd\xef".b.unpack('N')[0],
|
286
286
|
check_right: "\x02\xfd\xdc\xfa".b.unpack('N')[0],
|
287
287
|
},
|
288
288
|
{
|
289
289
|
record_size: 32,
|
290
290
|
# Left record + right record
|
291
|
-
node_bytes:
|
292
|
-
left:
|
293
|
-
right:
|
294
|
-
check_left:
|
291
|
+
node_bytes: "\xab\xcd\xef\x12".b + "\xfd\xdc\xfa\x15".b,
|
292
|
+
left: 2_882_400_018,
|
293
|
+
right: 4_259_117_589,
|
294
|
+
check_left: "\xab\xcd\xef\x12".b.unpack('N')[0],
|
295
295
|
check_right: "\xfd\xdc\xfa\x15".b.unpack('N')[0],
|
296
296
|
},
|
297
297
|
]
|
@@ -350,10 +350,10 @@ class ReaderTest < Minitest::Test # :nodoc:
|
|
350
350
|
end
|
351
351
|
|
352
352
|
pairs = {
|
353
|
-
'1.1.1.3'
|
354
|
-
'1.1.1.5'
|
355
|
-
'1.1.1.7'
|
356
|
-
'1.1.1.9'
|
353
|
+
'1.1.1.3' => '1.1.1.2',
|
354
|
+
'1.1.1.5' => '1.1.1.4',
|
355
|
+
'1.1.1.7' => '1.1.1.4',
|
356
|
+
'1.1.1.9' => '1.1.1.8',
|
357
357
|
'1.1.1.15' => '1.1.1.8',
|
358
358
|
'1.1.1.17' => '1.1.1.16',
|
359
359
|
'1.1.1.31' => '1.1.1.16',
|
@@ -388,7 +388,7 @@ class ReaderTest < Minitest::Test # :nodoc:
|
|
388
388
|
end
|
389
389
|
|
390
390
|
pairs = {
|
391
|
-
'::2:0:1'
|
391
|
+
'::2:0:1' => '::2:0:0',
|
392
392
|
'::2:0:33' => '::2:0:0',
|
393
393
|
'::2:0:39' => '::2:0:0',
|
394
394
|
'::2:0:41' => '::2:0:40',
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maxmind-db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Storey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A gem for reading MaxMind DB files. MaxMind DB is a binary file format
|
14
14
|
that stores data indexed by IP address subnets (IPv4 or IPv6).
|
@@ -114,9 +114,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
114
|
version: '0'
|
115
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- - "
|
117
|
+
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
119
|
+
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project:
|
122
122
|
rubygems_version: 2.7.6
|