minfraud 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +22 -0
  5. data/CHANGELOG.md +42 -0
  6. data/CODE_OF_CONDUCT.md +49 -0
  7. data/Gemfile +12 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.dev.md +4 -0
  10. data/README.md +178 -0
  11. data/Rakefile +6 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  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 +224 -0
  28. data/lib/minfraud.rb +51 -0
  29. data/lib/minfraud/assessments.rb +101 -0
  30. data/lib/minfraud/components/account.rb +23 -0
  31. data/lib/minfraud/components/addressable.rb +67 -0
  32. data/lib/minfraud/components/base.rb +35 -0
  33. data/lib/minfraud/components/billing.rb +5 -0
  34. data/lib/minfraud/components/credit_card.rb +52 -0
  35. data/lib/minfraud/components/custom_inputs.rb +14 -0
  36. data/lib/minfraud/components/device.rb +38 -0
  37. data/lib/minfraud/components/email.rb +21 -0
  38. data/lib/minfraud/components/event.rb +44 -0
  39. data/lib/minfraud/components/order.rb +52 -0
  40. data/lib/minfraud/components/payment.rb +152 -0
  41. data/lib/minfraud/components/report/transaction.rb +69 -0
  42. data/lib/minfraud/components/shipping.rb +18 -0
  43. data/lib/minfraud/components/shopping_cart.rb +30 -0
  44. data/lib/minfraud/components/shopping_cart_item.rb +33 -0
  45. data/lib/minfraud/enum.rb +34 -0
  46. data/lib/minfraud/error_handler.rb +65 -0
  47. data/lib/minfraud/errors.rb +10 -0
  48. data/lib/minfraud/http_service.rb +30 -0
  49. data/lib/minfraud/http_service/request.rb +37 -0
  50. data/lib/minfraud/http_service/response.rb +64 -0
  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 +156 -0
  69. data/lib/minfraud/model/warning.rb +63 -0
  70. data/lib/minfraud/report.rb +38 -0
  71. data/lib/minfraud/resolver.rb +33 -0
  72. data/lib/minfraud/version.rb +3 -0
  73. data/minfraud.gemspec +29 -0
  74. metadata +198 -0
@@ -0,0 +1,94 @@
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/continent'
24
+ require 'maxmind/geoip2/record/country'
25
+ require 'maxmind/geoip2/record/maxmind'
26
+ require 'maxmind/geoip2/record/represented_country'
27
+ require 'maxmind/geoip2/record/traits'
28
+
29
+ module MaxMind
30
+ module GeoIP2
31
+ module Model
32
+ # Model class for the data returned by the GeoIP2 Country web service and
33
+ # database. It is also used for GeoLite2 Country lookups.
34
+ class Country
35
+ # Continent data for the IP address.
36
+ #
37
+ # @return [MaxMind::GeoIP2::Record::Continent]
38
+ attr_reader :continent
39
+
40
+ # Country data for the IP address. This object represents the country where
41
+ # MaxMind believes the end user is located.
42
+ #
43
+ # @return [MaxMind::GeoIP2::Record::Country]
44
+ attr_reader :country
45
+
46
+ # Data related to your MaxMind account.
47
+ #
48
+ # @return [MaxMind::GeoIP2::Record::MaxMind]
49
+ attr_reader :maxmind
50
+
51
+ # Registered country data for the IP address. This record represents the
52
+ # country where the ISP has registered a given IP block and may differ from
53
+ # the user's country.
54
+ #
55
+ # @return [MaxMind::GeoIP2::Record::Country]
56
+ attr_reader :registered_country
57
+
58
+ # Represented country data for the IP address. The represented country is
59
+ # used for things like military bases. It is only present when the
60
+ # represented country differs from the country.
61
+ #
62
+ # @return [MaxMind::GeoIP2::Record::RepresentedCountry]
63
+ attr_reader :represented_country
64
+
65
+ # Data for the traits of the IP address.
66
+ #
67
+ # @return [MaxMind::GeoIP2::Record::Traits]
68
+ attr_reader :traits
69
+
70
+ # @!visibility private
71
+ def initialize(record, locales)
72
+ @continent = MaxMind::GeoIP2::Record::Continent.new(
73
+ record['continent'],
74
+ locales,
75
+ )
76
+ @country = MaxMind::GeoIP2::Record::Country.new(
77
+ record['country'],
78
+ locales,
79
+ )
80
+ @maxmind = MaxMind::GeoIP2::Record::MaxMind.new(record['maxmind'])
81
+ @registered_country = MaxMind::GeoIP2::Record::Country.new(
82
+ record['registered_country'],
83
+ locales,
84
+ )
85
+ @represented_country = MaxMind::GeoIP2::Record::RepresentedCountry.new(
86
+ record['represented_country'],
87
+ locales,
88
+ )
89
+ @traits = MaxMind::GeoIP2::Record::Traits.new(record['traits'])
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,38 @@
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/model/city'
24
+
25
+ module MaxMind
26
+ module GeoIP2
27
+ module Model
28
+ # Model class for the data returned by the GeoIP2 Precision Insights web
29
+ # service.
30
+ #
31
+ # The only difference between the City and Insights model classes is which
32
+ # fields in each record may be populated. See
33
+ # https://dev.maxmind.com/geoip/geoip2/web-services for more details.
34
+ class Insights < City
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,46 @@
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
+ module MaxMind
24
+ module GeoIP2
25
+ module Record
26
+ # @!visibility private
27
+ class Abstract
28
+ def initialize(record)
29
+ @record = record
30
+ end
31
+
32
+ protected
33
+
34
+ def get(key)
35
+ if @record.nil? || !@record.key?(key)
36
+ return false if key.start_with?('is_')
37
+
38
+ return nil
39
+ end
40
+
41
+ @record[key]
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,62 @@
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
+ # City-level data associated with an IP address.
29
+ #
30
+ # This record is returned by all location services and databases besides
31
+ # Country.
32
+ #
33
+ # See {MaxMind::GeoIP2::Record::Place} for inherited methods.
34
+ class City < Place
35
+ # A value from 0-100 indicating MaxMind's confidence that the city is
36
+ # correct. This attribute is only available from the Insights service and
37
+ # the GeoIP2 Enterprise database.
38
+ #
39
+ # @return [Integer, nil]
40
+ def confidence
41
+ get('confidence')
42
+ end
43
+
44
+ # The GeoName ID for the city. This attribute is returned by all location
45
+ # services and databases.
46
+ #
47
+ # @return [Integer, nil]
48
+ def geoname_id
49
+ get('geoname_id')
50
+ end
51
+
52
+ # A Hash where the keys are locale codes and the values are names. This
53
+ # attribute is returned by all location services and databases.
54
+ #
55
+ # @return [Hash<String, String>, nil]
56
+ def names
57
+ get('names')
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,61 @@
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 continent record associated with an IP address.
29
+ #
30
+ # This record is returned by all location services and databases.
31
+ #
32
+ # See {MaxMind::GeoIP2::Record::Place} for inherited methods.
33
+ class Continent < Place
34
+ # A two character continent code like "NA" (North America) or "OC"
35
+ # (Oceania). This attribute is returned by all location services and
36
+ # databases.
37
+ #
38
+ # @return [String, nil]
39
+ def code
40
+ get('code')
41
+ end
42
+
43
+ # The GeoName ID for the continent. This attribute is returned by all
44
+ # location services and databases.
45
+ #
46
+ # @return [String, nil]
47
+ def geoname_id
48
+ get('geoname_id')
49
+ end
50
+
51
+ # A Hash where the keys are locale codes and the values are names. This
52
+ # attribute is returned by all location services and databases.
53
+ #
54
+ # @return [Hash<String, String>, nil]
55
+ def names
56
+ get('names')
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,78 @@
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 country record associated with an IP address.
29
+ #
30
+ # This record is returned by all location services and databases.
31
+ #
32
+ # See {MaxMind::GeoIP2::Record::Place} for inherited methods.
33
+ class Country < Place
34
+ # A value from 0-100 indicating MaxMind's confidence that the country is
35
+ # correct. This attribute is only available from the Insights service and
36
+ # the GeoIP2 Enterprise database.
37
+ #
38
+ # @return [Integer, nil]
39
+ def confidence
40
+ get('confidence')
41
+ end
42
+
43
+ # The GeoName ID for the country. This attribute is returned by all
44
+ # location services and databases.
45
+ #
46
+ # @return [Integer, nil]
47
+ def geoname_id
48
+ get('geoname_id')
49
+ end
50
+
51
+ # This is true if the country is a member state of the European Union. This
52
+ # attribute is returned by all location services and databases.
53
+ #
54
+ # @return [Boolean]
55
+ def in_european_union?
56
+ get('is_in_european_union')
57
+ end
58
+
59
+ # The two-character ISO 3166-1 alpha code for the country. See
60
+ # https://en.wikipedia.org/wiki/ISO_3166-1. This attribute is returned by
61
+ # all location services and databases.
62
+ #
63
+ # @return [String, nil]
64
+ def iso_code
65
+ get('iso_code')
66
+ end
67
+
68
+ # A Hash where the keys are locale codes and the values are names. This
69
+ # attribute is returned by all location services and databases.
70
+ #
71
+ # @return [Hash<String, String>, nil]
72
+ def names
73
+ get('names')
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -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