geokit 1.13.1 → 1.14.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.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +22 -0
- data/.hound.yml +1 -1
- data/.rubocop.yml +28 -20
- data/CHANGELOG.md +8 -0
- data/README.markdown +8 -9
- data/Rakefile +1 -1
- data/fixtures/vcr_cassettes/bing_full.yml +1 -1
- data/fixtures/vcr_cassettes/bing_full_au.yml +1 -1
- data/fixtures/vcr_cassettes/bing_full_de.yml +1 -1
- data/fixtures/vcr_cassettes/opencage_reverse_cerdanyola.yml +47 -0
- data/fixtures/vcr_cassettes/test_component_filtering_with_special_characters.yml +126 -0
- data/geokit.gemspec +4 -5
- data/lib/geokit/geo_loc.rb +8 -6
- data/lib/geokit/geocoders/bing.rb +1 -1
- data/lib/geokit/geocoders/ca_geocoder.rb +2 -1
- data/lib/geokit/geocoders/fcc.rb +1 -0
- data/lib/geokit/geocoders/google.rb +3 -1
- data/lib/geokit/geocoders/opencage.rb +4 -0
- data/lib/geokit/geocoders/openstreetmap.rb +1 -0
- data/lib/geokit/geocoders/yahoo.rb +4 -1
- data/lib/geokit/geocoders/yandex.rb +1 -1
- data/lib/geokit/geocoders.rb +12 -2
- data/lib/geokit/mappable.rb +13 -6
- data/lib/geokit/multi_geocoder.rb +1 -0
- data/lib/geokit/version.rb +1 -1
- data/test/coverage_loader.rb +1 -1
- data/test/helper.rb +1 -1
- data/test/test_bing_geocoder.rb +4 -4
- data/test/test_ca_geocoder.rb +8 -0
- data/test/test_fcc_geocoder.rb +1 -0
- data/test/{test_geoloc.rb → test_geo_loc.rb} +1 -0
- data/test/test_google_geocoder.rb +15 -1
- data/test/test_ip_api_geocoder.rb +1 -1
- data/test/test_ipstack_geocoder.rb +1 -1
- data/test/test_multi_geocoder.rb +7 -4
- data/test/test_multi_ip_geocoder.rb +3 -1
- data/test/test_opencage_geocoder.rb +34 -3
- data/test/test_openstreetmap_geocoder.rb +2 -0
- data/test/test_yandex_geocoder.rb +5 -5
- metadata +16 -19
- data/.travis.yml +0 -12
- data/fixtures/vcr_cassettes/free_geo_ip_geocode.yml +0 -36
- data/lib/geokit/geocoders/free_geo_ip.rb +0 -36
- data/test/test_free_geo_ip_geocoder.rb +0 -21
@@ -15,7 +15,7 @@ module Geokit
|
|
15
15
|
def self.submit_url(address)
|
16
16
|
address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address
|
17
17
|
url = "https://geocode-maps.yandex.ru/1.x/?geocode=#{Geokit::Inflector.url_escape(address_str)}&format=json"
|
18
|
-
url += "&
|
18
|
+
url += "&apikey=#{key}" if key
|
19
19
|
url
|
20
20
|
end
|
21
21
|
|
data/lib/geokit/geocoders.rb
CHANGED
@@ -5,7 +5,6 @@ require 'json'
|
|
5
5
|
require 'logger'
|
6
6
|
require 'net/http'
|
7
7
|
require 'openssl'
|
8
|
-
require 'rexml/document'
|
9
8
|
require 'timeout'
|
10
9
|
require 'yaml'
|
11
10
|
|
@@ -76,6 +75,7 @@ module Geokit
|
|
76
75
|
class GeocodeError < StandardError; end
|
77
76
|
class TooManyQueriesError < StandardError; end
|
78
77
|
class AccessDeniedError < StandardError; end
|
78
|
+
class NoSuchGeocoderError < StandardError; end
|
79
79
|
|
80
80
|
# -------------------------------------------------------------------------------------------
|
81
81
|
# Geocoder Base class -- every geocoder should inherit from this
|
@@ -90,7 +90,7 @@ module Geokit
|
|
90
90
|
def self.geocode(address, *args)
|
91
91
|
logger.debug "#{provider_name} geocoding. address: #{address}, args #{args}"
|
92
92
|
do_geocode(address, *args) || GeoLoc.new
|
93
|
-
rescue TooManyQueriesError, GeocodeError, AccessDeniedError
|
93
|
+
rescue TooManyQueriesError, GeocodeError, AccessDeniedError, NoSuchGeocoderError
|
94
94
|
raise
|
95
95
|
rescue => e
|
96
96
|
logger.error "Caught an error during #{provider_name} geocoding call: #{$!}"
|
@@ -175,6 +175,16 @@ module Geokit
|
|
175
175
|
|
176
176
|
def self.parse(format, body, *args)
|
177
177
|
logger.debug "#{provider_name} geocoding. Result: #{CGI.escape(body)}"
|
178
|
+
|
179
|
+
if format == :xml
|
180
|
+
begin
|
181
|
+
require 'rexml/document'
|
182
|
+
rescue LoadError
|
183
|
+
logger.error "REXML load error, if using Ruby 3.0 add 'rexml' to your Gemfile"
|
184
|
+
raise
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
178
188
|
case format
|
179
189
|
when :json then parse_json(JSON.load(body), *args)
|
180
190
|
when :xml then parse_xml(REXML::Document.new(body), *args)
|
data/lib/geokit/mappable.rb
CHANGED
@@ -26,12 +26,19 @@ module Geokit
|
|
26
26
|
EARTH_RADIUS = {}
|
27
27
|
PER_LATITUDE_DEGREE = {}
|
28
28
|
|
29
|
-
# Returns the distance between two points.
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
29
|
+
# Returns the distance between two points.
|
30
|
+
# @param from [String, Array, LatLng] +required+ -
|
31
|
+
# +Geokit::LatLng+ compatible value
|
32
|
+
# @param to [String, Array, LatLng] +required+ -
|
33
|
+
# +Geokit::LatLng+ compatible value
|
34
|
+
# @option options [String, Symbol] :units
|
35
|
+
# valid values are :miles, :kms, :nms.
|
36
|
+
# Default to Geokit::default_units
|
37
|
+
# @option options [String, Symbol] :formula
|
38
|
+
# valid values are :flat or :sphere.
|
39
|
+
# Default to Geokit::default_formula
|
40
|
+
# @example
|
41
|
+
# Geokit::GeoLoc.distance_between("43.8374249,4.3600687", "44.1253665,4.0852818")
|
35
42
|
def distance_between(from, to, options = {})
|
36
43
|
units = get_units!(options)
|
37
44
|
from = Geokit::LatLng.normalize(from)
|
@@ -64,6 +64,7 @@ module Geokit
|
|
64
64
|
|
65
65
|
def self.geocoder(provider)
|
66
66
|
class_name = "#{Geokit::Inflector.camelize(provider.to_s)}Geocoder"
|
67
|
+
raise Geokit::Geocoders::NoSuchGeocoderError unless Geokit::Geocoders.const_defined? class_name
|
67
68
|
Geokit::Geocoders.const_get class_name
|
68
69
|
end
|
69
70
|
|
data/lib/geokit/version.rb
CHANGED
data/test/coverage_loader.rb
CHANGED
data/test/helper.rb
CHANGED
data/test/test_bing_geocoder.rb
CHANGED
@@ -14,7 +14,7 @@ class BingGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
14
14
|
# the testing methods themselves
|
15
15
|
def test_bing_full_address
|
16
16
|
key = geocoder_class.key
|
17
|
-
url = "#{@base_url}/#{
|
17
|
+
url = "#{@base_url}/#{CGI.escape(@full_address)}?key=#{key}&o=xml"
|
18
18
|
res = geocode(@full_address, :bing_full)
|
19
19
|
assert_equal 'CA', res.state
|
20
20
|
assert_equal 'San Francisco', res.city
|
@@ -28,7 +28,7 @@ class BingGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
28
28
|
def test_bing_full_address_au
|
29
29
|
address = '440 King William Street, Adelaide, Australia'
|
30
30
|
key = geocoder_class.key
|
31
|
-
url = "#{@base_url}/#{
|
31
|
+
url = "#{@base_url}/#{CGI.escape(address)}?key=#{key}&o=xml"
|
32
32
|
res = geocode(address, :bing_full_au)
|
33
33
|
assert_equal 'SA', res.state
|
34
34
|
assert_equal 'Adelaide', res.city
|
@@ -43,7 +43,7 @@ class BingGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
43
43
|
def test_bing_full_address_de
|
44
44
|
address = 'Platz der Republik 1, 11011 Berlin, Germany'
|
45
45
|
key = geocoder_class.key
|
46
|
-
url = "#{@base_url}/#{
|
46
|
+
url = "#{@base_url}/#{CGI.escape(address)}?key=#{key}&o=xml"
|
47
47
|
res = geocode(address, :bing_full_de)
|
48
48
|
assert_equal 'BE', res.state
|
49
49
|
assert_equal 'Berlin', res.city
|
@@ -59,7 +59,7 @@ class BingGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
59
59
|
def test_bing_country
|
60
60
|
address = 'Australia'
|
61
61
|
key = geocoder_class.key
|
62
|
-
url = "#{@base_url}/#{
|
62
|
+
url = "#{@base_url}/#{CGI.escape(address)}?key=#{key}&o=xml"
|
63
63
|
res = geocode(address, :bing_au)
|
64
64
|
assert_equal nil, res.state
|
65
65
|
assert_equal nil, res.city
|
data/test/test_ca_geocoder.rb
CHANGED
@@ -31,6 +31,14 @@ class CaGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
31
31
|
assert !geocode(@ca_full_txt).success
|
32
32
|
end
|
33
33
|
|
34
|
+
def test_geocoder_with_geo_loc_object
|
35
|
+
response = MockSuccess.new
|
36
|
+
response.expects(:body).returns(CA_SUCCESS)
|
37
|
+
url = 'http://geocoder.ca/?locate=2105+West+32nd+Avenue%2C+Vancouver%2C+BC&auth=SOMEKEYVALUE&geoit=xml'
|
38
|
+
geocoder_class.expects(:call_geocoder_service).with(url).returns(response)
|
39
|
+
verify(geocode(Geokit::GeoLoc.new(@ca_full_hash)))
|
40
|
+
end
|
41
|
+
|
34
42
|
private
|
35
43
|
|
36
44
|
def verify(location)
|
data/test/test_fcc_geocoder.rb
CHANGED
@@ -118,6 +118,7 @@ class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
118
118
|
res = geocode(@address, :google_city)
|
119
119
|
assert_nil res.street_address
|
120
120
|
assert_equal 'CA', res.state
|
121
|
+
assert_equal 'San Francisco County', res.county
|
121
122
|
assert_equal 'San Francisco', res.city
|
122
123
|
assert_equal '37.7749295,-122.4194155', res.ll
|
123
124
|
assert res.is_us?
|
@@ -133,6 +134,7 @@ class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
133
134
|
res = geocode(@address, :google_sublocality)
|
134
135
|
assert_equal '682 Prospect Place', res.street_address
|
135
136
|
assert_equal 'NY', res.state
|
137
|
+
assert_equal 'Kings County', res.county
|
136
138
|
assert_equal 'Brooklyn', res.city
|
137
139
|
assert_equal '40.6745812,-73.9541582', res.ll
|
138
140
|
assert res.is_us?
|
@@ -148,6 +150,7 @@ class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
148
150
|
res = geocode(@address, :google_administrative_area_level_3)
|
149
151
|
assert_equal '8 Barkwood Lane', res.street_address
|
150
152
|
assert_equal 'NY', res.state
|
153
|
+
assert_equal 'Saratoga County', res.county
|
151
154
|
assert_equal 'Clifton Park', res.city
|
152
155
|
assert_equal '42.829583,-73.788174', res.ll
|
153
156
|
assert res.is_us?
|
@@ -175,6 +178,7 @@ class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
175
178
|
TestHelper.expects(:last_url).with(url)
|
176
179
|
res = geocode(@google_city_loc, :google_city)
|
177
180
|
assert_equal 'CA', res.state
|
181
|
+
assert_equal 'San Francisco County', res.county
|
178
182
|
assert_equal 'San Francisco', res.city
|
179
183
|
assert_equal '37.7749295,-122.4194155', res.ll
|
180
184
|
assert res.is_us?
|
@@ -261,6 +265,7 @@ class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
261
265
|
assert_equal 'google', res.provider
|
262
266
|
|
263
267
|
assert_equal 'Madrid', res.city
|
268
|
+
assert_equal 'Madrid', res.county
|
264
269
|
assert_equal 'Community of Madrid', res.state
|
265
270
|
|
266
271
|
assert_equal 'Spain', res.country
|
@@ -353,7 +358,7 @@ class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
353
358
|
assert_equal 'TX', filtered_result.state
|
354
359
|
assert_equal 'Austin, TX, USA', filtered_result.full_address
|
355
360
|
|
356
|
-
url =
|
361
|
+
url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=austin&components=administrative_area%3Ail%7Ccountry%3Aus"
|
357
362
|
TestHelper.expects(:last_url).with(url)
|
358
363
|
filtered_result = geocode('austin',
|
359
364
|
:test_component_filtering_on,
|
@@ -368,5 +373,14 @@ class GoogleGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
368
373
|
|
369
374
|
assert_equal 'TX', filtered_result.state
|
370
375
|
assert_equal 'Austin, TX, USA', filtered_result.full_address
|
376
|
+
|
377
|
+
url = "https://maps.google.com/maps/api/geocode/json?sensor=false&address=S%C3%A3o+Paulo&components=administrative_area%3As%C3%A3o+paulo%7Ccountry%3Abr"
|
378
|
+
TestHelper.expects(:last_url).with(url)
|
379
|
+
filtered_result = geocode("São Paulo",
|
380
|
+
:test_component_filtering_with_special_characters,
|
381
|
+
components: { administrative_area: "São Paulo", country: "BR" })
|
382
|
+
|
383
|
+
assert_equal "SP", filtered_result.state
|
384
|
+
assert_equal "São Paulo, State of São Paulo, Brazil", filtered_result.full_address
|
371
385
|
end
|
372
386
|
end
|
@@ -10,7 +10,7 @@ class IpApiGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
10
10
|
assert_equal expected_url, TestHelper.last_url
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def test_ip_api_geocode
|
14
14
|
url = "http://ip-api.com/json/#{@ip}"
|
15
15
|
res = geocode(@ip, :ip_api_geocode)
|
16
16
|
assert_url url
|
@@ -11,7 +11,7 @@ class IpstackGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
11
11
|
assert_equal expected_url, TestHelper.last_url
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def test_ipstack_geocode
|
15
15
|
url = "http://api.ipstack.com/#{@ip}?access_key=some_api_key"
|
16
16
|
res = geocode(@ip, :ipstack_geocode)
|
17
17
|
|
data/test/test_multi_geocoder.rb
CHANGED
@@ -36,7 +36,9 @@ class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
36
36
|
def test_invalid_provider
|
37
37
|
temp = Geokit::Geocoders.provider_order
|
38
38
|
Geokit::Geocoders.provider_order = [:bogus]
|
39
|
-
|
39
|
+
assert_raise Geokit::Geocoders::NoSuchGeocoderError do
|
40
|
+
Geokit::Geocoders::MultiGeocoder.geocode(@address)
|
41
|
+
end
|
40
42
|
Geokit::Geocoders.provider_order = temp
|
41
43
|
end
|
42
44
|
|
@@ -78,7 +80,7 @@ class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
78
80
|
def test_reverse_geocode_with_invalid_provider
|
79
81
|
temp = Geokit::Geocoders.provider_order
|
80
82
|
Geokit::Geocoders.provider_order = [:bogus]
|
81
|
-
assert_raise
|
83
|
+
assert_raise Geokit::Geocoders::NoSuchGeocoderError do
|
82
84
|
Geokit::Geocoders::MultiGeocoder.reverse_geocode(@latlng)
|
83
85
|
end
|
84
86
|
Geokit::Geocoders.provider_order = temp
|
@@ -100,7 +102,8 @@ class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
100
102
|
end
|
101
103
|
|
102
104
|
def test_mapbox
|
103
|
-
|
104
|
-
Geokit::Geocoders::MultiGeocoder.
|
105
|
+
# This has its own test file now, is this even necessary?
|
106
|
+
# Geokit::Geocoders::MultiGeocoder.geocode(@address, provider_order: [:mapbox])
|
107
|
+
# Geokit::Geocoders::MultiGeocoder.reverse_geocode(@latlng, provider_order: [:mapbox])
|
105
108
|
end
|
106
109
|
end
|
@@ -30,7 +30,9 @@ class MultiIpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
30
30
|
def test_invalid_provider
|
31
31
|
temp = Geokit::Geocoders.ip_provider_order
|
32
32
|
Geokit::Geocoders.ip_provider_order = [:bogus]
|
33
|
-
|
33
|
+
assert_raise Geokit::Geocoders::NoSuchGeocoderError do
|
34
|
+
Geokit::Geocoders::MultiGeocoder.geocode(@ip_address)
|
35
|
+
end
|
34
36
|
Geokit::Geocoders.ip_provider_order = temp
|
35
37
|
end
|
36
38
|
end
|
@@ -22,6 +22,7 @@ class OpencageGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
22
22
|
res = geocode(@opencage_full_loc, :opencage_full)
|
23
23
|
|
24
24
|
assert_equal 'California', res.state
|
25
|
+
assert_equal 'San Francisco City and County', res.county
|
25
26
|
assert_equal 'San Francisco', res.city
|
26
27
|
assert_array_in_delta [37.7921509, -122.394], res.to_a
|
27
28
|
assert res.is_us?
|
@@ -35,6 +36,7 @@ class OpencageGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
35
36
|
res = geocode(@opencage_city_loc, :opencage_city)
|
36
37
|
|
37
38
|
assert_equal 'California', res.state
|
39
|
+
assert_equal 'San Francisco City and County', res.county
|
38
40
|
assert_equal 'San Francisco', res.city
|
39
41
|
assert_array_in_delta [37.7792768, -122.4192704], res.to_a
|
40
42
|
assert res.is_us?
|
@@ -53,13 +55,15 @@ class OpencageGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
53
55
|
assert_equal 'ES', res.country_code
|
54
56
|
assert_equal 'opencage', res.provider
|
55
57
|
|
58
|
+
assert_equal 'Chamberí', res.neighborhood
|
56
59
|
assert_equal 'Madrid', res.city
|
60
|
+
assert_equal 'Área metropolitana de Madrid y Corredor del Henares', res.county
|
57
61
|
assert_equal 'Community of Madrid', res.state
|
58
62
|
|
59
63
|
assert_equal 'Spain', res.country
|
60
64
|
assert_equal true, res.success
|
61
65
|
|
62
|
-
assert_equal
|
66
|
+
assert_equal 'Calle De Zurbano, Chamberí, Madrid, Community of Madrid, 28036, ES', res.full_address
|
63
67
|
assert_equal 28_036, res.zip
|
64
68
|
assert_equal 'Calle De Zurbano', res.street_address
|
65
69
|
end
|
@@ -75,15 +79,42 @@ class OpencageGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
75
79
|
assert_equal 'MK', res.country_code
|
76
80
|
assert_equal 'opencage', res.provider
|
77
81
|
|
82
|
+
assert_equal 'Жабино Маало', res.neighborhood
|
78
83
|
assert_equal 'Prilep', res.city
|
79
84
|
assert_equal 'Pelagonia Region', res.state
|
85
|
+
assert_equal 'Municipality of Prilep', res.county
|
86
|
+
assert_equal 'Prilep', res.city
|
80
87
|
|
81
88
|
assert_equal 'Macedonia', res.country
|
82
89
|
assert_equal 10, res.precision
|
83
90
|
assert_equal true, res.success
|
84
91
|
|
85
|
-
assert_equal
|
86
|
-
assert_equal
|
92
|
+
assert_equal 'Прилепски бранители, Prilep, Pelagonia Region, MK', res.full_address
|
93
|
+
assert_equal 'Прилепски бранители', res.street_address
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_opencage_cerdanyola
|
97
|
+
location = Geokit::GeoLoc.new
|
98
|
+
location.lat, location.lng = '41.493588', '2.141879'
|
99
|
+
|
100
|
+
url = "#{@base_url}?key=someopencageapikey&query=41.493588%2C2.141879&no_annotations=1"
|
101
|
+
TestHelper.expects(:last_url).with(url)
|
102
|
+
res = geocode(location.ll, :opencage_reverse_cerdanyola)
|
103
|
+
|
104
|
+
assert_equal 'ES', res.country_code
|
105
|
+
assert_equal 'opencage', res.provider
|
106
|
+
|
107
|
+
assert_equal 'Sant Martí', res.neighborhood
|
108
|
+
assert_equal 'Catalonia', res.state
|
109
|
+
assert_equal 'Vallès Occidental', res.county
|
110
|
+
assert_equal 'Cerdanyola Del Vallès', res.city
|
111
|
+
|
112
|
+
assert_equal 'Spain', res.country
|
113
|
+
assert_equal 9, res.precision
|
114
|
+
assert_equal true, res.success
|
115
|
+
|
116
|
+
assert_equal 'Passeig De La Riera, Cerdanyola Del Vallès, Catalonia, 08290, ES', res.full_address
|
117
|
+
assert_equal 'Passeig De La Riera', res.street_address
|
87
118
|
end
|
88
119
|
|
89
120
|
# check if the results are in Spanish if &language=es
|
@@ -103,6 +103,7 @@ class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
103
103
|
assert_equal 'osm', res.provider
|
104
104
|
|
105
105
|
assert_equal 'Prilep', res.city
|
106
|
+
assert_equal nil, res.county
|
106
107
|
assert_nil res.state
|
107
108
|
|
108
109
|
assert_equal 'Macedonia', res.country
|
@@ -127,6 +128,7 @@ class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
127
128
|
assert_equal 'osm', res.provider
|
128
129
|
|
129
130
|
assert_equal 'Madrid', res.city
|
131
|
+
assert_equal 'Madrid', res.county
|
130
132
|
assert_equal 'Madrid', res.state
|
131
133
|
|
132
134
|
assert_equal 'Spain', res.country
|
@@ -34,7 +34,7 @@ class YandexGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
34
34
|
res = geocode(@full_address)
|
35
35
|
|
36
36
|
assert_equal 'yandex', res.provider
|
37
|
-
assert_equal "
|
37
|
+
assert_equal "Улица новый арбат, 24", res.street_address
|
38
38
|
assert_equal "Москва", res.city
|
39
39
|
assert_equal 55.753083, res.lat
|
40
40
|
assert_equal 37.587614, res.lng
|
@@ -51,10 +51,10 @@ class YandexGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
51
51
|
res = geocode(region_address)
|
52
52
|
|
53
53
|
assert_equal 'yandex', res.provider
|
54
|
-
assert_equal
|
55
|
-
assert_equal
|
56
|
-
assert_equal
|
57
|
-
assert_equal
|
54
|
+
assert_equal 'Улица станиславского, 21', res.street_address
|
55
|
+
assert_equal 'Ростов на дону', res.city
|
56
|
+
assert_equal 'Ростовская область', res.state
|
57
|
+
assert_equal 'городской округ Ростов-на-Дону', res.district
|
58
58
|
assert_equal 47.21589, res.lat
|
59
59
|
assert_equal 39.703272, res.lng
|
60
60
|
assert_equal 'RU', res.country_code
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geokit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Noack
|
@@ -11,24 +11,24 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2023-01-24 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
|
-
- - "
|
20
|
+
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '1.0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - "
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '1.0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: coveralls_reborn
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
34
|
- - ">="
|
@@ -171,16 +171,16 @@ dependencies:
|
|
171
171
|
name: webmock
|
172
172
|
requirement: !ruby/object:Gem::Requirement
|
173
173
|
requirements:
|
174
|
-
- - "
|
174
|
+
- - ">="
|
175
175
|
- !ruby/object:Gem::Version
|
176
|
-
version: '
|
176
|
+
version: '0'
|
177
177
|
type: :development
|
178
178
|
prerelease: false
|
179
179
|
version_requirements: !ruby/object:Gem::Requirement
|
180
180
|
requirements:
|
181
|
-
- - "
|
181
|
+
- - ">="
|
182
182
|
- !ruby/object:Gem::Version
|
183
|
-
version: '
|
183
|
+
version: '0'
|
184
184
|
description: Geokit provides geocoding and distance calculation in an easy-to-use
|
185
185
|
API
|
186
186
|
email:
|
@@ -190,10 +190,10 @@ extensions: []
|
|
190
190
|
extra_rdoc_files:
|
191
191
|
- README.markdown
|
192
192
|
files:
|
193
|
+
- ".github/workflows/ci.yml"
|
193
194
|
- ".gitignore"
|
194
195
|
- ".hound.yml"
|
195
196
|
- ".rubocop.yml"
|
196
|
-
- ".travis.yml"
|
197
197
|
- CHANGELOG.md
|
198
198
|
- Gemfile
|
199
199
|
- MIT-LICENSE
|
@@ -205,7 +205,6 @@ files:
|
|
205
205
|
- fixtures/vcr_cassettes/bing_full_au.yml
|
206
206
|
- fixtures/vcr_cassettes/bing_full_de.yml
|
207
207
|
- fixtures/vcr_cassettes/fcc_reverse_geocode.yml
|
208
|
-
- fixtures/vcr_cassettes/free_geo_ip_geocode.yml
|
209
208
|
- fixtures/vcr_cassettes/geo_plugin_geocode.yml
|
210
209
|
- fixtures/vcr_cassettes/geobytes_geocode.yml
|
211
210
|
- fixtures/vcr_cassettes/geocodio_geocode.yml
|
@@ -237,6 +236,7 @@ files:
|
|
237
236
|
- fixtures/vcr_cassettes/opencage_city.yml
|
238
237
|
- fixtures/vcr_cassettes/opencage_full.yml
|
239
238
|
- fixtures/vcr_cassettes/opencage_language_response_es.yml
|
239
|
+
- fixtures/vcr_cassettes/opencage_reverse_cerdanyola.yml
|
240
240
|
- fixtures/vcr_cassettes/opencage_reverse_madrid.yml
|
241
241
|
- fixtures/vcr_cassettes/opencage_reverse_prilep.yml
|
242
242
|
- fixtures/vcr_cassettes/ripe_geocode.yml
|
@@ -245,6 +245,7 @@ files:
|
|
245
245
|
- fixtures/vcr_cassettes/test_component_filtering_off.yml
|
246
246
|
- fixtures/vcr_cassettes/test_component_filtering_on.yml
|
247
247
|
- fixtures/vcr_cassettes/test_component_filtering_on_without_filter.yml
|
248
|
+
- fixtures/vcr_cassettes/test_component_filtering_with_special_characters.yml
|
248
249
|
- fixtures/vcr_cassettes/yahoo_city.yml
|
249
250
|
- fixtures/vcr_cassettes/yahoo_full.yml
|
250
251
|
- fixtures/vcr_cassettes/yahoo_no_results.yml
|
@@ -258,7 +259,6 @@ files:
|
|
258
259
|
- lib/geokit/geocoders/bing.rb
|
259
260
|
- lib/geokit/geocoders/ca_geocoder.rb
|
260
261
|
- lib/geokit/geocoders/fcc.rb
|
261
|
-
- lib/geokit/geocoders/free_geo_ip.rb
|
262
262
|
- lib/geokit/geocoders/geo_plugin.rb
|
263
263
|
- lib/geokit/geocoders/geobytes.rb
|
264
264
|
- lib/geokit/geocoders/geocodio.rb
|
@@ -291,11 +291,10 @@ files:
|
|
291
291
|
- test/test_bounds.rb
|
292
292
|
- test/test_ca_geocoder.rb
|
293
293
|
- test/test_fcc_geocoder.rb
|
294
|
-
- test/
|
294
|
+
- test/test_geo_loc.rb
|
295
295
|
- test/test_geo_plugin_geocoder.rb
|
296
296
|
- test/test_geobytes_geocoder.rb
|
297
297
|
- test/test_geocodio_geocoder.rb
|
298
|
-
- test/test_geoloc.rb
|
299
298
|
- test/test_geonames_geocoder.rb
|
300
299
|
- test/test_google_geocoder.rb
|
301
300
|
- test/test_inflector.rb
|
@@ -333,15 +332,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
333
332
|
requirements:
|
334
333
|
- - ">="
|
335
334
|
- !ruby/object:Gem::Version
|
336
|
-
version:
|
335
|
+
version: 2.5.9
|
337
336
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
338
337
|
requirements:
|
339
338
|
- - ">="
|
340
339
|
- !ruby/object:Gem::Version
|
341
340
|
version: '0'
|
342
341
|
requirements: []
|
343
|
-
|
344
|
-
rubygems_version: 2.4.5.1
|
342
|
+
rubygems_version: 3.4.4
|
345
343
|
signing_key:
|
346
344
|
specification_version: 4
|
347
345
|
summary: 'Geokit: encoding and distance calculation gem'
|
@@ -353,11 +351,10 @@ test_files:
|
|
353
351
|
- test/test_bounds.rb
|
354
352
|
- test/test_ca_geocoder.rb
|
355
353
|
- test/test_fcc_geocoder.rb
|
356
|
-
- test/
|
354
|
+
- test/test_geo_loc.rb
|
357
355
|
- test/test_geo_plugin_geocoder.rb
|
358
356
|
- test/test_geobytes_geocoder.rb
|
359
357
|
- test/test_geocodio_geocoder.rb
|
360
|
-
- test/test_geoloc.rb
|
361
358
|
- test/test_geonames_geocoder.rb
|
362
359
|
- test/test_google_geocoder.rb
|
363
360
|
- test/test_inflector.rb
|
data/.travis.yml
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: get
|
5
|
-
uri: http://freegeoip.net/xml/74.125.237.209
|
6
|
-
body:
|
7
|
-
encoding: US-ASCII
|
8
|
-
string: ''
|
9
|
-
headers:
|
10
|
-
Accept:
|
11
|
-
- ! '*/*'
|
12
|
-
User-Agent:
|
13
|
-
- Ruby
|
14
|
-
response:
|
15
|
-
status:
|
16
|
-
code: 200
|
17
|
-
message: OK
|
18
|
-
headers:
|
19
|
-
Access-Control-Allow-Origin:
|
20
|
-
- ! '*'
|
21
|
-
Content-Type:
|
22
|
-
- application/xml
|
23
|
-
Date:
|
24
|
-
- Fri, 13 Dec 2013 13:02:44 GMT
|
25
|
-
Content-Length:
|
26
|
-
- '398'
|
27
|
-
body:
|
28
|
-
encoding: US-ASCII
|
29
|
-
string: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Response>\n <Ip>74.125.237.209</Ip>\n
|
30
|
-
<CountryCode>US</CountryCode>\n <CountryName>United States</CountryName>\n
|
31
|
-
<RegionCode>CA</RegionCode>\n <RegionName>California</RegionName>\n <City>Mountain
|
32
|
-
View</City>\n <ZipCode>94043</ZipCode>\n <Latitude>37.4192</Latitude>\n <Longitude>-122.0574</Longitude>\n
|
33
|
-
<MetroCode>807</MetroCode>\n <AreaCode>650</AreaCode>\n</Response>\n"
|
34
|
-
http_version:
|
35
|
-
recorded_at: Fri, 13 Dec 2013 13:03:38 GMT
|
36
|
-
recorded_with: VCR 2.7.0
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module Geokit
|
2
|
-
module Geocoders
|
3
|
-
# Provides geocoding based upon an IP address. The underlying web service is freegeoip.net
|
4
|
-
class FreeGeoIpGeocoder < BaseIpGeocoder
|
5
|
-
private
|
6
|
-
|
7
|
-
def self.do_geocode(ip, _=nil)
|
8
|
-
warn '[DEPRECATION] `freegeoip` is deprecated. Please use `ipstack`'\
|
9
|
-
' instead. You can find more at'\
|
10
|
-
' https://github.com/apilayer/freegeoip#readme'
|
11
|
-
|
12
|
-
process :xml, ip
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.submit_url(ip)
|
16
|
-
"http://freegeoip.net/xml/#{ip}"
|
17
|
-
end
|
18
|
-
|
19
|
-
XML_MAPPINGS = {
|
20
|
-
city: 'City',
|
21
|
-
state: 'RegionCode',
|
22
|
-
zip: 'ZipCode',
|
23
|
-
country_code: 'CountryCode',
|
24
|
-
lat: 'Latitude',
|
25
|
-
lng: 'Longitude',
|
26
|
-
}
|
27
|
-
|
28
|
-
def self.parse_xml(xml)
|
29
|
-
loc = new_loc
|
30
|
-
set_mappings(loc, xml.elements['Response'], XML_MAPPINGS)
|
31
|
-
loc.success = !!loc.city && !loc.city.empty?
|
32
|
-
loc
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|