geocoder 1.8.0 → 1.8.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +1 -1
- data/lib/geocoder/cache.rb +2 -2
- data/lib/geocoder/configuration.rb +4 -0
- data/lib/geocoder/lookup.rb +4 -3
- data/lib/geocoder/lookups/amap.rb +2 -2
- data/lib/geocoder/lookups/geoapify.rb +7 -1
- data/lib/geocoder/lookups/geoportail_lu.rb +1 -1
- data/lib/geocoder/lookups/ipbase.rb +49 -0
- data/lib/geocoder/lookups/test.rb +1 -0
- data/lib/geocoder/lookups/yandex.rb +3 -3
- data/lib/geocoder/results/ipbase.rb +40 -0
- data/lib/geocoder/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35c6a6d57b8ff3818e9d1b616558a8bbdc3b4b51db2b2c7dadb720eccafd27b4
|
4
|
+
data.tar.gz: 8e8fe1ba7cb9da58131a965d3d85589084f4d5dd70409990f49b89b83923f4e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bbf04cc8488a533038783e2d250706fb2d2439de8ea1e5bf4b89950d1dd51d5e9393454540a23cb4e7fbc33b58f54fec1c71c14c98d6fbe8bb8e5caad786989
|
7
|
+
data.tar.gz: 92b8f5933a421b47cdededea9c8e8df8d2ec6f45cb25c8726b343a773b315929529fe821cae08868576ae2e8c5cdbc5fd1782bd2bfc8c56f36afdc1514f52b58
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,12 @@ Changelog
|
|
3
3
|
|
4
4
|
Major changes to Geocoder for each release. Please see the Git log for complete list of changes.
|
5
5
|
|
6
|
+
1.8.1 (2022 Sep 23)
|
7
|
+
-------------------
|
8
|
+
* Add support for IPBase lookup (thanks github.com/jonallured).
|
9
|
+
* Test cleanup (thanks github.com/jonallured).
|
10
|
+
* Prevent errors when existing constant name shadows a lookup class (thanks github.com/avram-twitch).
|
11
|
+
|
6
12
|
1.8.0 (2022 May 17)
|
7
13
|
-------------------
|
8
14
|
* Add support for 2GIS lookup (thanks github.com/ggrikgg).
|
data/README.md
CHANGED
@@ -747,7 +747,7 @@ If your application requires quick geocoding responses you will probably need to
|
|
747
747
|
|
748
748
|
For IP address lookups in Rails applications, it is generally NOT a good idea to run `request.location` during a synchronous page load without understanding the speed/behavior of your configured lookup. If the lookup becomes slow, so will your website.
|
749
749
|
|
750
|
-
For the most part, the speed of geocoding requests has little to do with the Geocoder gem. Please take the time to learn about your configured lookup
|
750
|
+
For the most part, the speed of geocoding requests has little to do with the Geocoder gem. Please take the time to learn about your configured lookup before posting performance-related issues.
|
751
751
|
|
752
752
|
### Unexpected Responses from Geocoding Services
|
753
753
|
|
data/lib/geocoder/cache.rb
CHANGED
@@ -14,7 +14,7 @@ module Geocoder
|
|
14
14
|
def [](url)
|
15
15
|
interpret store_service.read(url)
|
16
16
|
rescue => e
|
17
|
-
warn "Geocoder cache read error: #{e}"
|
17
|
+
Geocoder.log(:warn, "Geocoder cache read error: #{e}")
|
18
18
|
end
|
19
19
|
|
20
20
|
##
|
@@ -23,7 +23,7 @@ module Geocoder
|
|
23
23
|
def []=(url, value)
|
24
24
|
store_service.write(url, value)
|
25
25
|
rescue => e
|
26
|
-
warn "Geocoder cache write error: #{e}"
|
26
|
+
Geocoder.log(:warn, "Geocoder cache write error: #{e}")
|
27
27
|
end
|
28
28
|
|
29
29
|
##
|
data/lib/geocoder/lookup.rb
CHANGED
@@ -92,7 +92,8 @@ module Geocoder
|
|
92
92
|
:ipstack,
|
93
93
|
:ip2location,
|
94
94
|
:ipgeolocation,
|
95
|
-
:ipqualityscore
|
95
|
+
:ipqualityscore,
|
96
|
+
:ipbase
|
96
97
|
]
|
97
98
|
end
|
98
99
|
|
@@ -137,9 +138,9 @@ module Geocoder
|
|
137
138
|
# Safely instantiate Lookup
|
138
139
|
#
|
139
140
|
def instantiate_lookup(name)
|
140
|
-
class_name =
|
141
|
+
class_name = classify_name(name)
|
141
142
|
begin
|
142
|
-
Geocoder::Lookup.const_get(class_name)
|
143
|
+
Geocoder::Lookup.const_get(class_name, inherit=false)
|
143
144
|
rescue NameError
|
144
145
|
require "geocoder/lookups/#{name}"
|
145
146
|
end
|
@@ -32,10 +32,10 @@ module Geocoder::Lookup
|
|
32
32
|
return doc['geocodes'] unless doc['geocodes'].blank?
|
33
33
|
when ['0', 'INVALID_USER_KEY']
|
34
34
|
raise_error(Geocoder::InvalidApiKey, "invalid api key") ||
|
35
|
-
warn
|
35
|
+
Geocoder.log(:warn, "#{self.name} Geocoding API error: invalid api key.")
|
36
36
|
else
|
37
37
|
raise_error(Geocoder::Error, "server error.") ||
|
38
|
-
warn
|
38
|
+
Geocoder.log(:warn, "#{self.name} Geocoding API error: server error - [#{doc['info']}]")
|
39
39
|
end
|
40
40
|
return []
|
41
41
|
end
|
@@ -22,7 +22,13 @@ module Geocoder
|
|
22
22
|
private
|
23
23
|
|
24
24
|
def base_query_url(query)
|
25
|
-
method = query.reverse_geocode?
|
25
|
+
method = if query.reverse_geocode?
|
26
|
+
'reverse'
|
27
|
+
elsif query.options[:autocomplete]
|
28
|
+
'autocomplete'
|
29
|
+
else
|
30
|
+
'search'
|
31
|
+
end
|
26
32
|
"https://api.geoapify.com/v1/geocode/#{method}?"
|
27
33
|
end
|
28
34
|
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'geocoder/lookups/base'
|
2
|
+
require 'geocoder/results/ipbase'
|
3
|
+
|
4
|
+
module Geocoder::Lookup
|
5
|
+
class Ipbase < Base
|
6
|
+
|
7
|
+
def name
|
8
|
+
"ipbase.com"
|
9
|
+
end
|
10
|
+
|
11
|
+
def supported_protocols
|
12
|
+
[:https]
|
13
|
+
end
|
14
|
+
|
15
|
+
private # ---------------------------------------------------------------
|
16
|
+
|
17
|
+
def base_query_url(query)
|
18
|
+
"https://api.ipbase.com/v2/info?"
|
19
|
+
end
|
20
|
+
|
21
|
+
def query_url_params(query)
|
22
|
+
{
|
23
|
+
:ip => query.sanitized_text,
|
24
|
+
:apikey => configuration.api_key
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def results(query)
|
29
|
+
# don't look up a loopback or private address, just return the stored result
|
30
|
+
return [reserved_result(query.text)] if query.internal_ip_address?
|
31
|
+
doc = fetch_data(query) || {}
|
32
|
+
doc.fetch("data", {})["location"] ? [doc] : []
|
33
|
+
end
|
34
|
+
|
35
|
+
def reserved_result(ip)
|
36
|
+
{
|
37
|
+
"data" => {
|
38
|
+
"ip" => ip,
|
39
|
+
"location" => {
|
40
|
+
"city" => { "name" => "" },
|
41
|
+
"country" => { "alpha2" => "RD", "name" => "Reserved" },
|
42
|
+
"region" => { "alpha2" => "", "name" => "" },
|
43
|
+
"zip" => ""
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -24,11 +24,11 @@ module Geocoder::Lookup
|
|
24
24
|
|
25
25
|
def results(query)
|
26
26
|
return [] unless doc = fetch_data(query)
|
27
|
-
if
|
28
|
-
if
|
27
|
+
if [400, 403].include? doc['statusCode']
|
28
|
+
if doc['statusCode'] == 403 and doc['message'] == 'Invalid key'
|
29
29
|
raise_error(Geocoder::InvalidApiKey) || Geocoder.log(:warn, "Invalid API key.")
|
30
30
|
else
|
31
|
-
Geocoder.log(:warn, "Yandex Geocoding API error: #{
|
31
|
+
Geocoder.log(:warn, "Yandex Geocoding API error: #{doc['statusCode']} (#{doc['message']}).")
|
32
32
|
end
|
33
33
|
return []
|
34
34
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'geocoder/results/base'
|
2
|
+
|
3
|
+
module Geocoder::Result
|
4
|
+
class Ipbase < Base
|
5
|
+
def ip
|
6
|
+
@data["data"]['ip']
|
7
|
+
end
|
8
|
+
|
9
|
+
def country_code
|
10
|
+
@data["data"]["location"]["country"]["alpha2"]
|
11
|
+
end
|
12
|
+
|
13
|
+
def country
|
14
|
+
@data["data"]["location"]["country"]["name"]
|
15
|
+
end
|
16
|
+
|
17
|
+
def state_code
|
18
|
+
@data["data"]["location"]["region"]["alpha2"]
|
19
|
+
end
|
20
|
+
|
21
|
+
def state
|
22
|
+
@data["data"]["location"]["region"]["name"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def city
|
26
|
+
@data["data"]["location"]["city"]["name"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def postal_code
|
30
|
+
@data["data"]["location"]["zip"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def coordinates
|
34
|
+
[
|
35
|
+
@data["data"]["location"]["latitude"].to_f,
|
36
|
+
@data["data"]["location"]["longitude"].to_f
|
37
|
+
]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/geocoder/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geocoder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Reisner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Object geocoding (by street or IP address), reverse geocoding (coordinates
|
14
14
|
to street address), distance queries for ActiveRecord and Mongoid, result caching,
|
@@ -75,6 +75,7 @@ files:
|
|
75
75
|
- lib/geocoder/lookups/here.rb
|
76
76
|
- lib/geocoder/lookups/ip2location.rb
|
77
77
|
- lib/geocoder/lookups/ipapi_com.rb
|
78
|
+
- lib/geocoder/lookups/ipbase.rb
|
78
79
|
- lib/geocoder/lookups/ipdata_co.rb
|
79
80
|
- lib/geocoder/lookups/ipgeolocation.rb
|
80
81
|
- lib/geocoder/lookups/ipinfo_io.rb
|
@@ -138,6 +139,7 @@ files:
|
|
138
139
|
- lib/geocoder/results/here.rb
|
139
140
|
- lib/geocoder/results/ip2location.rb
|
140
141
|
- lib/geocoder/results/ipapi_com.rb
|
142
|
+
- lib/geocoder/results/ipbase.rb
|
141
143
|
- lib/geocoder/results/ipdata_co.rb
|
142
144
|
- lib/geocoder/results/ipgeolocation.rb
|
143
145
|
- lib/geocoder/results/ipinfo_io.rb
|
@@ -201,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
201
203
|
- !ruby/object:Gem::Version
|
202
204
|
version: '0'
|
203
205
|
requirements: []
|
204
|
-
rubygems_version: 3.1.
|
206
|
+
rubygems_version: 3.1.6
|
205
207
|
signing_key:
|
206
208
|
specification_version: 4
|
207
209
|
summary: Complete geocoding solution for Ruby.
|