geokit 1.13.1 → 1.14.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|