maxmind-geoip2 1.4.0 → 1.6.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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/README.md +16 -16
  4. data/lib/maxmind/geoip2/client.rb +56 -44
  5. data/lib/maxmind/geoip2/model/anonymous_plus.rb +1 -0
  6. data/lib/maxmind/geoip2/model/asn.rb +1 -1
  7. data/lib/maxmind/geoip2/model/city.rb +3 -3
  8. data/lib/maxmind/geoip2/model/connection_type.rb +1 -1
  9. data/lib/maxmind/geoip2/model/country.rb +2 -2
  10. data/lib/maxmind/geoip2/model/domain.rb +1 -1
  11. data/lib/maxmind/geoip2/model/enterprise.rb +2 -2
  12. data/lib/maxmind/geoip2/model/insights.rb +2 -2
  13. data/lib/maxmind/geoip2/model/isp.rb +1 -1
  14. data/lib/maxmind/geoip2/reader.rb +21 -21
  15. data/lib/maxmind/geoip2/record/anonymizer.rb +17 -1
  16. data/lib/maxmind/geoip2/record/anonymizer_feed.rb +53 -0
  17. data/lib/maxmind/geoip2/record/city.rb +1 -1
  18. data/lib/maxmind/geoip2/record/country.rb +1 -1
  19. data/lib/maxmind/geoip2/record/location.rb +1 -1
  20. data/lib/maxmind/geoip2/record/postal.rb +1 -1
  21. data/lib/maxmind/geoip2/record/subdivision.rb +1 -1
  22. data/lib/maxmind/geoip2/record/traits.rb +14 -7
  23. data/lib/maxmind/geoip2/version.rb +1 -1
  24. metadata +15 -96
  25. data/CLAUDE.md +0 -390
  26. data/Gemfile +0 -5
  27. data/Gemfile.lock +0 -126
  28. data/README.dev.md +0 -4
  29. data/Rakefile +0 -14
  30. data/maxmind-geoip2.gemspec +0 -41
  31. data/test/data/LICENSE-APACHE +0 -202
  32. data/test/data/LICENSE-MIT +0 -17
  33. data/test/data/MaxMind-DB-spec.md +0 -573
  34. data/test/data/README.md +0 -11
  35. data/test/data/bad-data/README.md +0 -7
  36. data/test/data/bad-data/libmaxminddb/libmaxminddb-offset-integer-overflow.mmdb +0 -0
  37. data/test/data/bad-data/maxminddb-golang/cyclic-data-structure.mmdb +0 -0
  38. data/test/data/bad-data/maxminddb-golang/invalid-bytes-length.mmdb +0 -1
  39. data/test/data/bad-data/maxminddb-golang/invalid-data-record-offset.mmdb +0 -0
  40. data/test/data/bad-data/maxminddb-golang/invalid-map-key-length.mmdb +0 -0
  41. data/test/data/bad-data/maxminddb-golang/invalid-string-length.mmdb +0 -1
  42. data/test/data/bad-data/maxminddb-golang/metadata-is-an-uint128.mmdb +0 -1
  43. data/test/data/bad-data/maxminddb-golang/unexpected-bytes.mmdb +0 -0
  44. data/test/data/bad-data/maxminddb-python/bad-unicode-in-map-key.mmdb +0 -0
  45. data/test/data/cmd/write-test-data/main.go +0 -68
  46. data/test/data/go.mod +0 -13
  47. data/test/data/go.sum +0 -16
  48. data/test/data/pkg/writer/decoder.go +0 -178
  49. data/test/data/pkg/writer/geoip2.go +0 -184
  50. data/test/data/pkg/writer/ip.go +0 -39
  51. data/test/data/pkg/writer/maxmind.go +0 -246
  52. data/test/data/pkg/writer/nestedstructures.go +0 -73
  53. data/test/data/pkg/writer/writer.go +0 -61
  54. data/test/data/source-data/GeoIP-Anonymous-Plus-Test.json +0 -175
  55. data/test/data/source-data/GeoIP2-Anonymous-IP-Test.json +0 -55
  56. data/test/data/source-data/GeoIP2-City-Test.json +0 -13272
  57. data/test/data/source-data/GeoIP2-Connection-Type-Test.json +0 -127
  58. data/test/data/source-data/GeoIP2-Country-Test.json +0 -15978
  59. data/test/data/source-data/GeoIP2-DensityIncome-Test.json +0 -14
  60. data/test/data/source-data/GeoIP2-Domain-Test.json +0 -457
  61. data/test/data/source-data/GeoIP2-Enterprise-Test.json +0 -1110
  62. data/test/data/source-data/GeoIP2-IP-Risk-Test.json +0 -31
  63. data/test/data/source-data/GeoIP2-ISP-Test.json +0 -12605
  64. data/test/data/source-data/GeoIP2-Precision-Enterprise-Sandbox-Test.json +0 -296
  65. data/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json +0 -3189
  66. data/test/data/source-data/GeoIP2-Static-IP-Score-Test.json +0 -2147
  67. data/test/data/source-data/GeoIP2-User-Count-Test.json +0 -2855
  68. data/test/data/source-data/GeoLite2-ASN-Test.json +0 -4120
  69. data/test/data/source-data/GeoLite2-City-Test.json +0 -12969
  70. data/test/data/source-data/GeoLite2-Country-Test.json +0 -11369
  71. data/test/data/test-data/GeoIP-Anonymous-Plus-Test.mmdb +0 -0
  72. data/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb +0 -0
  73. data/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb +0 -0
  74. data/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb +0 -0
  75. data/test/data/test-data/GeoIP2-City-Test.mmdb +0 -0
  76. data/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb +0 -0
  77. data/test/data/test-data/GeoIP2-Country-Test.mmdb +0 -0
  78. data/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb +0 -0
  79. data/test/data/test-data/GeoIP2-Domain-Test.mmdb +0 -0
  80. data/test/data/test-data/GeoIP2-Enterprise-Test.mmdb +0 -0
  81. data/test/data/test-data/GeoIP2-IP-Risk-Test.mmdb +0 -0
  82. data/test/data/test-data/GeoIP2-ISP-Test.mmdb +0 -0
  83. data/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +0 -0
  84. data/test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb +0 -0
  85. data/test/data/test-data/GeoIP2-User-Count-Test.mmdb +0 -0
  86. data/test/data/test-data/GeoLite2-ASN-Test.mmdb +0 -0
  87. data/test/data/test-data/GeoLite2-City-Test.mmdb +0 -0
  88. data/test/data/test-data/GeoLite2-Country-Test.mmdb +0 -0
  89. data/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb +0 -0
  90. data/test/data/test-data/MaxMind-DB-string-value-entries.mmdb +0 -0
  91. data/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb +0 -0
  92. data/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb +0 -0
  93. data/test/data/test-data/MaxMind-DB-test-decoder.mmdb +0 -0
  94. data/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb +0 -0
  95. data/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb +0 -0
  96. data/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb +0 -0
  97. data/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb +0 -0
  98. data/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb +0 -0
  99. data/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb +0 -0
  100. data/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb +0 -0
  101. data/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb +0 -0
  102. data/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb +0 -0
  103. data/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb +0 -0
  104. data/test/data/test-data/MaxMind-DB-test-nested.mmdb +0 -0
  105. data/test/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb +0 -0
  106. data/test/data/test-data/README.md +0 -42
  107. data/test/data/test-data/maps-with-pointers.raw +0 -0
  108. data/test/data/tidyall.ini +0 -5
  109. data/test/test_client.rb +0 -467
  110. data/test/test_model_country.rb +0 -95
  111. data/test/test_model_names.rb +0 -50
  112. data/test/test_reader.rb +0 -589
@@ -1,95 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'maxmind/geoip2'
4
- require 'minitest/autorun'
5
-
6
- class CountryModelTest < Minitest::Test
7
- RAW = {
8
- 'continent' => {
9
- 'code' => 'NA',
10
- 'geoname_id' => 42,
11
- 'names' => { 'en' => 'North America' },
12
- },
13
- 'country' => {
14
- 'geoname_id' => 1,
15
- 'iso_code' => 'US',
16
- 'names' => { 'en' => 'United States of America' },
17
- },
18
- 'registered_country' => {
19
- 'geoname_id' => 2,
20
- 'is_in_european_union' => true,
21
- 'iso_code' => 'DE',
22
- 'names' => { 'en' => 'Germany' },
23
- },
24
- 'traits' => {
25
- 'ip_address' => '1.2.3.4',
26
- 'prefix_length' => 24,
27
- },
28
- }.freeze
29
-
30
- def test_objects
31
- model = MaxMind::GeoIP2::Model::Country.new(RAW, ['en'])
32
-
33
- assert_instance_of(MaxMind::GeoIP2::Model::Country, model)
34
- assert_instance_of(MaxMind::GeoIP2::Record::Continent, model.continent)
35
- assert_instance_of(MaxMind::GeoIP2::Record::Country, model.country)
36
- assert_instance_of(
37
- MaxMind::GeoIP2::Record::Country, model.registered_country,
38
- )
39
- assert_instance_of(
40
- MaxMind::GeoIP2::Record::RepresentedCountry, model.represented_country,
41
- )
42
- assert_instance_of(
43
- MaxMind::GeoIP2::Record::Traits, model.traits,
44
- )
45
- end
46
-
47
- def test_values
48
- model = MaxMind::GeoIP2::Model::Country.new(RAW, ['en'])
49
-
50
- assert_equal(42, model.continent.geoname_id)
51
- assert_equal('NA', model.continent.code)
52
- assert_equal({ 'en' => 'North America' }, model.continent.names)
53
- assert_equal('North America', model.continent.name)
54
-
55
- assert_equal(1, model.country.geoname_id)
56
- refute(model.country.in_european_union?)
57
- assert_equal('US', model.country.iso_code)
58
- assert_equal({ 'en' => 'United States of America' }, model.country.names)
59
- assert_equal('United States of America', model.country.name)
60
- assert_nil(model.country.confidence)
61
-
62
- assert_equal(2, model.registered_country.geoname_id)
63
- assert(model.registered_country.in_european_union?)
64
- assert_equal('DE', model.registered_country.iso_code)
65
- assert_equal({ 'en' => 'Germany' }, model.registered_country.names)
66
- assert_equal('Germany', model.registered_country.name)
67
- end
68
-
69
- def test_unknown_record
70
- model = MaxMind::GeoIP2::Model::Country.new(RAW, ['en'])
71
- assert_raises(NoMethodError) { model.unknown_record }
72
- end
73
-
74
- def test_unknown_trait
75
- model = MaxMind::GeoIP2::Model::Country.new(RAW, ['en'])
76
- assert_raises(NoMethodError) { model.traits.unknown }
77
- end
78
-
79
- # This can happen if we're being created from a not fully populated response
80
- # when used by minFraud. It shouldn't ever happen from GeoIP2 though.
81
- def test_no_traits
82
- model = MaxMind::GeoIP2::Model::Country.new(
83
- {
84
- 'continent' => {
85
- 'code' => 'NA',
86
- 'geoname_id' => 42,
87
- 'names' => { 'en' => 'North America' },
88
- },
89
- },
90
- ['en'],
91
- )
92
-
93
- assert_equal(42, model.continent.geoname_id)
94
- end
95
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'maxmind/geoip2'
4
- require 'minitest/autorun'
5
-
6
- class ModelNameTest < Minitest::Test
7
- RAW = {
8
- 'continent' => {
9
- 'code' => 'NA',
10
- 'geoname_id' => 42,
11
- 'names' => {
12
- 'en' => 'North America',
13
- 'zh-CN' => '北美洲',
14
- },
15
- },
16
- 'country' => {
17
- 'geoname_id' => 1,
18
- 'iso_code' => 'US',
19
- 'names' => {
20
- 'en' => 'United States of America',
21
- 'ru' => 'объединяет государства',
22
- 'zh-CN' => '美国',
23
- },
24
- },
25
- 'traits' => {
26
- 'ip_address' => '1.2.3.4',
27
- },
28
- }.freeze
29
-
30
- def test_fallback
31
- model = MaxMind::GeoIP2::Model::Country.new(RAW, %w[ru zh-CN en])
32
-
33
- assert_equal('北美洲', model.continent.name)
34
- assert_equal('объединяет государства', model.country.name)
35
- end
36
-
37
- def test_two_fallbacks
38
- model = MaxMind::GeoIP2::Model::Country.new(RAW, %w[ru jp])
39
-
40
- assert_nil(model.continent.name)
41
- assert_equal('объединяет государства', model.country.name)
42
- end
43
-
44
- def test_no_fallbacks
45
- model = MaxMind::GeoIP2::Model::Country.new(RAW, %w[jp])
46
-
47
- assert_nil(model.continent.name)
48
- assert_nil(model.country.name)
49
- end
50
- end