ip_lookup 1.1.0 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -3
- data/lib/ip_lookup.rb +16 -23
- data/lib/ip_lookup/db.rb +11 -12
- data/lib/ip_lookup/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d6593b39b336032a59d5271dd66cdd0eab98d761eae3f4b9ba7e5029781ee2d
|
4
|
+
data.tar.gz: 31a52ea45909d4de79db6f0d43e8d3cbb1d927c27970c6ff3ed2c4c363e033b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf2cbaaf566345c12f089321f89fa818d72122da8924fb8e5284b2d5edb39db35fe302b210ab69a4bb3a7e3a62044ad7f6f22b541d65798f6921d2412b1581ef
|
7
|
+
data.tar.gz: ec4966ad08a3467f51ed81abafe752b332e76fa9d69d83815ff35706c6081e7bdafe1e258b5195101c5619c1903337a441f03e8931eb79e3c8b4ef723d734899
|
data/README.md
CHANGED
@@ -26,7 +26,6 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
Before using the gem the db file needs to be downloaded / updated.
|
28
28
|
|
29
|
-
|
30
29
|
```ruby
|
31
30
|
# download / update database
|
32
31
|
IPLookup.DB.update update_period: 30, update_uri: "http://path_to_database_GeoLite2-City.mmdb.gz"
|
@@ -35,12 +34,12 @@ IPLookup.DB.update update_period: 30, update_uri: "http://path_to_database_GeoLi
|
|
35
34
|
- default update_period (in days): 30
|
36
35
|
- default update_uri: http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
|
37
36
|
|
38
|
-
*NOTE: The gem provides
|
37
|
+
*NOTE: The gem provides post-install hook to download / update the db using Gem extensions.*
|
39
38
|
|
40
39
|
### Usage
|
41
40
|
|
42
41
|
```ruby
|
43
|
-
ip_lookup = IPLookup.new
|
42
|
+
ip_lookup = IPLookup.new "213.61.214.178", silent_exceptions: false
|
44
43
|
|
45
44
|
ip_lookup.country
|
46
45
|
# => "de"
|
@@ -58,6 +57,8 @@ ip_lookup.subdivision
|
|
58
57
|
*Defaults:*
|
59
58
|
- silent_exceptions: false
|
60
59
|
|
60
|
+
*NOTE: If silent exceptions is set to true, IPLookup returns default values in case the IP address couln't be looked up.
|
61
|
+
|
61
62
|
## Development
|
62
63
|
|
63
64
|
After checking out the repo, run bin/setup to install dependencies. Then, run `rake spec` to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
|
data/lib/ip_lookup.rb
CHANGED
@@ -14,35 +14,36 @@ class IPLookup
|
|
14
14
|
def initialize(ip_address, silent_exceptions: false)
|
15
15
|
@silent_exceptions = silent_exceptions
|
16
16
|
@result = DB.new(silent_exceptions).lookup(ip_address)
|
17
|
+
rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError => e
|
18
|
+
raise e unless silent_exceptions
|
17
19
|
end
|
18
20
|
|
19
21
|
def country
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
return DEFAULT_COUNTRY unless result&.found?
|
23
|
+
|
24
|
+
iso_code = result.country.iso_code
|
25
|
+
iso_code ? iso_code.downcase : DEFAULT_COUNTRY
|
24
26
|
end
|
25
27
|
|
26
28
|
def timezone
|
27
|
-
|
28
|
-
timezone = result.location.time_zone
|
29
|
+
return DEFAULT_TIMEZONE unless result&.found?
|
29
30
|
|
30
|
-
|
31
|
+
timezone = result.location.time_zone
|
31
32
|
|
32
|
-
|
33
|
-
|
33
|
+
timezone ||= timezone_for result.country.iso_code if result.country.iso_code
|
34
|
+
timezone || DEFAULT_TIMEZONE
|
34
35
|
end
|
35
36
|
|
36
37
|
def coordinates
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
return DEFAULT_COORDINATES unless result&.found?
|
39
|
+
|
40
|
+
[result.location.latitude, result.location.longitude]
|
40
41
|
end
|
41
42
|
|
42
43
|
def subdivision
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
return DEFAULT_SUBDIVISION unless result&.found?
|
45
|
+
|
46
|
+
result.subdivisions.any? ? result.subdivisions.first.iso_code.downcase : DEFAULT_SUBDIVISION
|
46
47
|
end
|
47
48
|
|
48
49
|
private
|
@@ -51,12 +52,4 @@ class IPLookup
|
|
51
52
|
tz = TZInfo::Country.get iso_code
|
52
53
|
tz.zone_identifiers.first if tz.zone_identifiers.any?
|
53
54
|
end
|
54
|
-
|
55
|
-
def error_handler(default)
|
56
|
-
result&.found? ? yield : default
|
57
|
-
rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError
|
58
|
-
raise e unless silent_exceptions
|
59
|
-
|
60
|
-
default
|
61
|
-
end
|
62
55
|
end
|
data/lib/ip_lookup/db.rb
CHANGED
@@ -15,26 +15,25 @@ class IPLookup
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def lookup(ip_address)
|
18
|
-
db.lookup ip_address
|
18
|
+
self.class.db.lookup ip_address
|
19
19
|
rescue Errno::ENOENT
|
20
20
|
raise DBFileNotFoundError, "Couldn't find DB file. Please update DB before using lookup." unless silent_exceptions
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
@mutex ||= Mutex.new
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
23
|
+
class << self
|
28
24
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
def db
|
26
|
+
mutex.synchronize do
|
27
|
+
@db ||= begin
|
28
|
+
MaxMindDB.new full_db_path
|
29
|
+
end
|
33
30
|
end
|
34
31
|
end
|
35
|
-
end
|
36
32
|
|
37
|
-
|
33
|
+
def mutex
|
34
|
+
@mutex ||= Mutex.new
|
35
|
+
end
|
36
|
+
|
38
37
|
def update(update_period: DEFAULT_UPDATE_PERIOD_IN_DAYS, update_uri: DEFAULT_UPDATE_URI)
|
39
38
|
return unless update_db? update_period
|
40
39
|
|
data/lib/ip_lookup/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ip_lookup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ole Richter
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-08-
|
13
|
+
date: 2018-08-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: maxminddb
|