maxmind-db 1.0.0.beta → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|