minfraud 1.0.3 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/rubocop.yml +12 -0
  3. data/.github/workflows/test.yml +32 -0
  4. data/.gitignore +2 -0
  5. data/.rubocop.yml +108 -0
  6. data/CHANGELOG.md +70 -2
  7. data/CODE_OF_CONDUCT.md +4 -4
  8. data/Gemfile +11 -2
  9. data/LICENSE.txt +2 -1
  10. data/README.dev.md +4 -0
  11. data/README.md +245 -59
  12. data/Rakefile +9 -3
  13. data/bin/console +4 -3
  14. data/lib/maxmind/geoip2/model/city.rb +99 -0
  15. data/lib/maxmind/geoip2/model/country.rb +94 -0
  16. data/lib/maxmind/geoip2/model/insights.rb +38 -0
  17. data/lib/maxmind/geoip2/record/abstract.rb +46 -0
  18. data/lib/maxmind/geoip2/record/city.rb +62 -0
  19. data/lib/maxmind/geoip2/record/continent.rb +61 -0
  20. data/lib/maxmind/geoip2/record/country.rb +78 -0
  21. data/lib/maxmind/geoip2/record/location.rb +97 -0
  22. data/lib/maxmind/geoip2/record/maxmind.rb +41 -0
  23. data/lib/maxmind/geoip2/record/place.rb +52 -0
  24. data/lib/maxmind/geoip2/record/postal.rb +54 -0
  25. data/lib/maxmind/geoip2/record/represented_country.rb +47 -0
  26. data/lib/maxmind/geoip2/record/subdivision.rb +72 -0
  27. data/lib/maxmind/geoip2/record/traits.rb +233 -0
  28. data/lib/minfraud.rb +48 -8
  29. data/lib/minfraud/assessments.rb +118 -49
  30. data/lib/minfraud/components/account.rb +31 -9
  31. data/lib/minfraud/components/addressable.rb +73 -26
  32. data/lib/minfraud/components/base.rb +35 -11
  33. data/lib/minfraud/components/billing.rb +5 -0
  34. data/lib/minfraud/components/credit_card.rb +64 -20
  35. data/lib/minfraud/components/custom_inputs.rb +25 -0
  36. data/lib/minfraud/components/device.rb +51 -10
  37. data/lib/minfraud/components/email.rb +29 -7
  38. data/lib/minfraud/components/event.rb +60 -13
  39. data/lib/minfraud/components/order.rb +60 -22
  40. data/lib/minfraud/components/payment.rb +166 -21
  41. data/lib/minfraud/components/report/transaction.rb +80 -0
  42. data/lib/minfraud/components/shipping.rb +14 -5
  43. data/lib/minfraud/components/shopping_cart.rb +19 -12
  44. data/lib/minfraud/components/shopping_cart_item.rb +42 -13
  45. data/lib/minfraud/enum.rb +22 -8
  46. data/lib/minfraud/error_handler.rb +45 -18
  47. data/lib/minfraud/errors.rb +22 -2
  48. data/lib/minfraud/http_service.rb +22 -8
  49. data/lib/minfraud/http_service/request.rb +19 -18
  50. data/lib/minfraud/http_service/response.rb +49 -12
  51. data/lib/minfraud/model/abstract.rb +20 -0
  52. data/lib/minfraud/model/address.rb +52 -0
  53. data/lib/minfraud/model/billing_address.rb +11 -0
  54. data/lib/minfraud/model/credit_card.rb +75 -0
  55. data/lib/minfraud/model/device.rb +54 -0
  56. data/lib/minfraud/model/disposition.rb +35 -0
  57. data/lib/minfraud/model/email.rb +54 -0
  58. data/lib/minfraud/model/email_domain.rb +24 -0
  59. data/lib/minfraud/model/error.rb +28 -0
  60. data/lib/minfraud/model/factors.rb +24 -0
  61. data/lib/minfraud/model/geoip2_location.rb +25 -0
  62. data/lib/minfraud/model/insights.rb +68 -0
  63. data/lib/minfraud/model/ip_address.rb +82 -0
  64. data/lib/minfraud/model/issuer.rb +49 -0
  65. data/lib/minfraud/model/score.rb +76 -0
  66. data/lib/minfraud/model/score_ip_address.rb +23 -0
  67. data/lib/minfraud/model/shipping_address.rb +30 -0
  68. data/lib/minfraud/model/subscores.rb +178 -0
  69. data/lib/minfraud/model/warning.rb +63 -0
  70. data/lib/minfraud/report.rb +58 -0
  71. data/lib/minfraud/resolver.rb +25 -16
  72. data/lib/minfraud/validates.rb +187 -0
  73. data/lib/minfraud/version.rb +4 -1
  74. data/minfraud.gemspec +23 -18
  75. metadata +113 -39
  76. data/.travis.yml +0 -5
@@ -0,0 +1,97 @@
1
+ # Copyright (c) 2020 by MaxMind, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ # frozen_string_literal: true
22
+
23
+ require 'maxmind/geoip2/record/abstract'
24
+
25
+ module MaxMind
26
+ module GeoIP2
27
+ module Record
28
+ # Contains data for the location record associated with an IP address.
29
+ #
30
+ # This record is returned by all location services and databases besides
31
+ # Country.
32
+ class Location < Abstract
33
+ # The approximate accuracy radius in kilometers around the latitude and
34
+ # longitude for the IP address. This is the radius where we have a 67%
35
+ # confidence that the device using the IP address resides within the circle
36
+ # centered at the latitude and longitude with the provided radius.
37
+ #
38
+ # @return [Integer, nil]
39
+ def accuracy_radius
40
+ get('accuracy_radius')
41
+ end
42
+
43
+ # The average income in US dollars associated with the requested IP
44
+ # address. This attribute is only available from the Insights service.
45
+ #
46
+ # @return [Integer, nil]
47
+ def average_income
48
+ get('average_income')
49
+ end
50
+
51
+ # The approximate latitude of the location associated with the IP address.
52
+ # This value is not precise and should not be used to identify a particular
53
+ # address or household.
54
+ #
55
+ # @return [Float, nil]
56
+ def latitude
57
+ get('latitude')
58
+ end
59
+
60
+ # The approximate longitude of the location associated with the IP address.
61
+ # This value is not precise and should not be used to identify a particular
62
+ # address or household.
63
+ #
64
+ # @return [Float, nil]
65
+ def longitude
66
+ get('longitude')
67
+ end
68
+
69
+ # The metro code of the location if the location is in the US. MaxMind
70
+ # returns the same metro codes as the Google AdWords API. See
71
+ # https://developers.google.com/adwords/api/docs/appendix/cities-DMAregions.
72
+ #
73
+ # @return [Integer, nil]
74
+ def metro_code
75
+ get('metro_code')
76
+ end
77
+
78
+ # The estimated population per square kilometer associated with the IP
79
+ # address. This attribute is only available from the Insights service.
80
+ #
81
+ # @return [Integer, nil]
82
+ def population_density
83
+ get('population_density')
84
+ end
85
+
86
+ # The time zone associated with location, as specified by the IANA Time
87
+ # Zone Database, e.g., "America/New_York". See
88
+ # https://www.iana.org/time-zones.
89
+ #
90
+ # @return [String, nil]
91
+ def time_zone
92
+ get('time_zone')
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,41 @@
1
+ # Copyright (c) 2020 by MaxMind, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ # frozen_string_literal: true
22
+
23
+ require 'maxmind/geoip2/record/abstract'
24
+
25
+ module MaxMind
26
+ module GeoIP2
27
+ module Record
28
+ # Contains data about your account.
29
+ #
30
+ # This record is returned by all location services.
31
+ class MaxMind < Abstract
32
+ # The number of remaining queries you have for the service you are calling.
33
+ #
34
+ # @return [Integer, nil]
35
+ def queries_remaining
36
+ get('queries_remaining')
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,52 @@
1
+ # Copyright (c) 2020 by MaxMind, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ # frozen_string_literal: true
22
+
23
+ require 'maxmind/geoip2/record/abstract'
24
+
25
+ module MaxMind
26
+ module GeoIP2
27
+ module Record
28
+ # Location data common to different location types.
29
+ class Place < Abstract
30
+ # @!visibility private
31
+ def initialize(record, locales)
32
+ super(record)
33
+ @locales = locales
34
+ end
35
+
36
+ # The first available localized name in order of preference.
37
+ #
38
+ # @return [String, nil]
39
+ def name
40
+ n = names
41
+ return nil if n.nil?
42
+
43
+ @locales.each do |locale|
44
+ return n[locale] if n.key?(locale)
45
+ end
46
+
47
+ nil
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,54 @@
1
+ # Copyright (c) 2020 by MaxMind, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ # frozen_string_literal: true
22
+
23
+ require 'maxmind/geoip2/record/abstract'
24
+
25
+ module MaxMind
26
+ module GeoIP2
27
+ module Record
28
+ # Contains data for the postal record associated with an IP address.
29
+ #
30
+ # This record is returned by all location services and databases besides
31
+ # Country.
32
+ class Postal < Abstract
33
+ # The postal code of the location. Postal codes are not available for all
34
+ # countries. In some countries, this will only contain part of the postal
35
+ # code. This attribute is returned by all location databases and services
36
+ # besides Country.
37
+ #
38
+ # @return [String, nil]
39
+ def code
40
+ get('code')
41
+ end
42
+
43
+ # A value from 0-100 indicating MaxMind's confidence that the postal code
44
+ # is correct. This attribute is only available from the Insights service
45
+ # and the GeoIP2 Enterprise database.
46
+ #
47
+ # @return [Integer, nil]
48
+ def confidence
49
+ get('confidence')
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,47 @@
1
+ # Copyright (c) 2020 by MaxMind, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ # frozen_string_literal: true
22
+
23
+ require 'maxmind/geoip2/record/country'
24
+
25
+ module MaxMind
26
+ module GeoIP2
27
+ module Record
28
+ # Contains data for the represented country associated with an IP address.
29
+ #
30
+ # This class contains the country-level data associated with an IP address
31
+ # for the IP's represented country. The represented country is the country
32
+ # represented by something like a military base.
33
+ #
34
+ # See {MaxMind::GeoIP2::Record::Country} for inherited methods.
35
+ class RepresentedCountry < Country
36
+ # A string indicating the type of entity that is representing the country.
37
+ # Currently we only return +military+ but this could expand to include
38
+ # other types in the future.
39
+ #
40
+ # @return [String, nil]
41
+ def type
42
+ get('type')
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,72 @@
1
+ # Copyright (c) 2020 by MaxMind, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ # frozen_string_literal: true
22
+
23
+ require 'maxmind/geoip2/record/place'
24
+
25
+ module MaxMind
26
+ module GeoIP2
27
+ module Record
28
+ # Contains data for the subdivisions associated with an IP address.
29
+ #
30
+ # This record is returned by all location databases and services besides
31
+ # Country.
32
+ #
33
+ # See {MaxMind::GeoIP2::Record::Place} for inherited methods.
34
+ class Subdivision < Place
35
+ # This is a value from 0-100 indicating MaxMind's confidence that the
36
+ # subdivision is correct. This attribute is only available from the
37
+ # Insights service and the GeoIP2 Enterprise database.
38
+ #
39
+ # @return [Integer, nil]
40
+ def confidence
41
+ get('confidence')
42
+ end
43
+
44
+ # This is a GeoName ID for the subdivision. This attribute is returned by
45
+ # all location databases and services besides Country.
46
+ #
47
+ # @return [Integer, nil]
48
+ def geoname_id
49
+ get('geoname_id')
50
+ end
51
+
52
+ # This is a string up to three characters long contain the subdivision
53
+ # portion of the ISO 3166-2 code. See
54
+ # https://en.wikipedia.org/wiki/ISO_3166-2. This attribute is returned by
55
+ # all location databases and services except Country.
56
+ #
57
+ # @return [String, nil]
58
+ def iso_code
59
+ get('iso_code')
60
+ end
61
+
62
+ # A Hash where the keys are locale codes and the values are names. This attribute is returned by all location services and
63
+ # databases besides country.
64
+ #
65
+ # @return [Hash<String, String>, nil]
66
+ def names
67
+ get('names')
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,233 @@
1
+ # Copyright (c) 2020 by MaxMind, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ # frozen_string_literal: true
22
+
23
+ require 'ipaddr'
24
+ require 'maxmind/geoip2/record/abstract'
25
+
26
+ module MaxMind
27
+ module GeoIP2
28
+ module Record
29
+ # Contains data for the traits record associated with an IP address.
30
+ #
31
+ # This record is returned by all location services and databases.
32
+ class Traits < Abstract
33
+ # @!visibility private
34
+ def initialize(record)
35
+ super(record)
36
+ if !record.key?('network') && record.key?('ip_address') &&
37
+ record.key?('prefix_length')
38
+ ip = IPAddr.new(record['ip_address']).mask(record['prefix_length'])
39
+ # We could use ip.prefix instead of record['prefix_length'], but that
40
+ # method only becomes available in Ruby 2.5+.
41
+ record['network'] = format('%s/%d', ip.to_s, record['prefix_length'])
42
+ end
43
+ end
44
+
45
+ # The autonomous system number associated with the IP address. See
46
+ # Wikipedia[https://en.wikipedia.org/wiki/Autonomous_system_(Internet)].
47
+ # This attribute is only available from the City and Insights web service
48
+ # and the GeoIP2 Enterprise database.
49
+ #
50
+ # @return [Integer, nil]
51
+ def autonomous_system_number
52
+ get('autonomous_system_number')
53
+ end
54
+
55
+ # The organization associated with the registered autonomous system number
56
+ # for the IP address. See
57
+ # Wikipedia[https://en.wikipedia.org/wiki/Autonomous_system_(Internet)].
58
+ # This attribute is only available from the City and Insights web service
59
+ # and the GeoIP2 Enterprise database.
60
+ #
61
+ # @return [String, nil]
62
+ def autonomous_system_organization
63
+ get('autonomous_system_organization')
64
+ end
65
+
66
+ # The connection type may take the following values: "Dialup",
67
+ # "Cable/DSL", "Corporate", "Cellular". Additional values may be added in
68
+ # the future. This attribute is only available in the GeoIP2 Enterprise
69
+ # database.
70
+ #
71
+ # @return [String, nil]
72
+ def connection_type
73
+ get('connection_type')
74
+ end
75
+
76
+ # The second level domain associated with the IP address. This will be
77
+ # something like "example.com" or "example.co.uk", not "foo.example.com".
78
+ # This attribute is only available from the City and Insights web service
79
+ # and the GeoIP2 Enterprise database.
80
+ #
81
+ # @return [String, nil]
82
+ def domain
83
+ get('domain')
84
+ end
85
+
86
+ # The IP address that the data in the model is for. If you performed a "me"
87
+ # lookup against the web service, this will be the externally routable IP
88
+ # address for the system the code is running on. If the system is behind a
89
+ # NAT, this may differ from the IP address locally assigned to it. This
90
+ # attribute is returned by all end points.
91
+ #
92
+ # @return [String]
93
+ def ip_address
94
+ get('ip_address')
95
+ end
96
+
97
+ # This is true if the IP address belongs to any sort of anonymous network.
98
+ # This property is only available from GeoIP2 Precision Insights.
99
+ #
100
+ # @return [Boolean]
101
+ def anonymous?
102
+ get('is_anonymous')
103
+ end
104
+
105
+ # This is true if the IP address is registered to an anonymous VPN
106
+ # provider. If a VPN provider does not register subnets under names
107
+ # associated with them, we will likely only flag their IP ranges using the
108
+ # hosting_provider? property. This property is only available from GeoIP2
109
+ # Precision Insights.
110
+ #
111
+ # @return [Boolean]
112
+ def anonymous_vpn?
113
+ get('is_anonymous_vpn')
114
+ end
115
+
116
+ # This is true if the IP address belongs to a hosting or VPN provider (see
117
+ # description of the anonymous_vpn? property). This property is only
118
+ # available from GeoIP2 Precision Insights.
119
+ #
120
+ # @return [Boolean]
121
+ def hosting_provider?
122
+ get('is_hosting_provider')
123
+ end
124
+
125
+ # This attribute is true if MaxMind believes this IP address to be a
126
+ # legitimate proxy, such as an internal VPN used by a corporation. This
127
+ # attribute is only available in the GeoIP2 Enterprise database.
128
+ #
129
+ # @return [Boolean]
130
+ def legitimate_proxy?
131
+ get('is_legitimate_proxy')
132
+ end
133
+
134
+ # This is true if the IP address belongs to a public proxy. This property
135
+ # is only available from GeoIP2 Precision Insights.
136
+ #
137
+ # @return [Boolean]
138
+ def public_proxy?
139
+ get('is_public_proxy')
140
+ end
141
+
142
+ # This is true if the IP address is on a suspected anonymizing network
143
+ # and belongs to a residential ISP. This property is only available
144
+ # from GeoIP2 Precision Insights.
145
+ #
146
+ # @return [Boolean]
147
+ def residential_proxy?
148
+ get('is_residential_proxy')
149
+ end
150
+
151
+ # This is true if the IP address is a Tor exit node. This property is only
152
+ # available from GeoIP2 Precision Insights.
153
+ #
154
+ # @return [Boolean]
155
+ def tor_exit_node?
156
+ get('is_tor_exit_node')
157
+ end
158
+
159
+ # The name of the ISP associated with the IP address. This attribute is
160
+ # only available from the City and Insights web services and the GeoIP2
161
+ # Enterprise database.
162
+ #
163
+ # @return [String, nil]
164
+ def isp
165
+ get('isp')
166
+ end
167
+
168
+ # The network in CIDR notation associated with the record. In particular,
169
+ # this is the largest network where all of the fields besides ip_address
170
+ # have the same value.
171
+ #
172
+ # @return [String]
173
+ def network
174
+ get('network')
175
+ end
176
+
177
+ # The name of the organization associated with the IP address. This
178
+ # attribute is only available from the City and Insights web services and
179
+ # the GeoIP2 Enterprise database.
180
+ #
181
+ # @return [String, nil]
182
+ def organization
183
+ get('organization')
184
+ end
185
+
186
+ # An indicator of how static or dynamic an IP address is. This property is
187
+ # only available from GeoIP2 Precision Insights.
188
+ #
189
+ # @return [Float, nil]
190
+ def static_ip_score
191
+ get('static_ip_score')
192
+ end
193
+
194
+ # The estimated number of users sharing the IP/network during the past 24
195
+ # hours. For IPv4, the count is for the individual IP. For IPv6, the count
196
+ # is for the /64 network. This property is only available from GeoIP2
197
+ # Precision Insights.
198
+ #
199
+ # @return [Integer, nil]
200
+ def user_count
201
+ get('user_count')
202
+ end
203
+
204
+ # The user type associated with the IP address. This can be one of the
205
+ # following values:
206
+ #
207
+ # * business
208
+ # * cafe
209
+ # * cellular
210
+ # * college
211
+ # * content_delivery_network
212
+ # * dialup
213
+ # * government
214
+ # * hosting
215
+ # * library
216
+ # * military
217
+ # * residential
218
+ # * router
219
+ # * school
220
+ # * search_engine_spider
221
+ # * traveler
222
+ #
223
+ # This attribute is only available from the Insights web service and the
224
+ # GeoIP2 Enterprise database.
225
+ #
226
+ # @return [String, nil]
227
+ def user_type
228
+ get('user_type')
229
+ end
230
+ end
231
+ end
232
+ end
233
+ end