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.
Files changed (45) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +22 -0
  3. data/.hound.yml +1 -1
  4. data/.rubocop.yml +28 -20
  5. data/CHANGELOG.md +8 -0
  6. data/README.markdown +8 -9
  7. data/Rakefile +1 -1
  8. data/fixtures/vcr_cassettes/bing_full.yml +1 -1
  9. data/fixtures/vcr_cassettes/bing_full_au.yml +1 -1
  10. data/fixtures/vcr_cassettes/bing_full_de.yml +1 -1
  11. data/fixtures/vcr_cassettes/opencage_reverse_cerdanyola.yml +47 -0
  12. data/fixtures/vcr_cassettes/test_component_filtering_with_special_characters.yml +126 -0
  13. data/geokit.gemspec +4 -5
  14. data/lib/geokit/geo_loc.rb +8 -6
  15. data/lib/geokit/geocoders/bing.rb +1 -1
  16. data/lib/geokit/geocoders/ca_geocoder.rb +2 -1
  17. data/lib/geokit/geocoders/fcc.rb +1 -0
  18. data/lib/geokit/geocoders/google.rb +3 -1
  19. data/lib/geokit/geocoders/opencage.rb +4 -0
  20. data/lib/geokit/geocoders/openstreetmap.rb +1 -0
  21. data/lib/geokit/geocoders/yahoo.rb +4 -1
  22. data/lib/geokit/geocoders/yandex.rb +1 -1
  23. data/lib/geokit/geocoders.rb +12 -2
  24. data/lib/geokit/mappable.rb +13 -6
  25. data/lib/geokit/multi_geocoder.rb +1 -0
  26. data/lib/geokit/version.rb +1 -1
  27. data/test/coverage_loader.rb +1 -1
  28. data/test/helper.rb +1 -1
  29. data/test/test_bing_geocoder.rb +4 -4
  30. data/test/test_ca_geocoder.rb +8 -0
  31. data/test/test_fcc_geocoder.rb +1 -0
  32. data/test/{test_geoloc.rb → test_geo_loc.rb} +1 -0
  33. data/test/test_google_geocoder.rb +15 -1
  34. data/test/test_ip_api_geocoder.rb +1 -1
  35. data/test/test_ipstack_geocoder.rb +1 -1
  36. data/test/test_multi_geocoder.rb +7 -4
  37. data/test/test_multi_ip_geocoder.rb +3 -1
  38. data/test/test_opencage_geocoder.rb +34 -3
  39. data/test/test_openstreetmap_geocoder.rb +2 -0
  40. data/test/test_yandex_geocoder.rb +5 -5
  41. metadata +16 -19
  42. data/.travis.yml +0 -12
  43. data/fixtures/vcr_cassettes/free_geo_ip_geocode.yml +0 -36
  44. data/lib/geokit/geocoders/free_geo_ip.rb +0 -36
  45. 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 += "&key=#{key}" if key
18
+ url += "&apikey=#{key}" if key
19
19
  url
20
20
  end
21
21
 
@@ -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)
@@ -26,12 +26,19 @@ module Geokit
26
26
  EARTH_RADIUS = {}
27
27
  PER_LATITUDE_DEGREE = {}
28
28
 
29
- # Returns the distance between two points. The from and to parameters are
30
- # required to have lat and lng attributes. Valid options are:
31
- # :units - valid values are :miles, :kms, :nms
32
- # (Geokit::default_units is the default)
33
- # :formula - valid values are :flat or :sphere
34
- # (Geokit::default_formula is the default)
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
 
@@ -1,3 +1,3 @@
1
1
  module Geokit
2
- VERSION = '1.13.1'
2
+ VERSION = '1.14.0'
3
3
  end
@@ -1,5 +1,5 @@
1
1
  unless ENV['COVERAGE'] == 'off'
2
- COVERAGE_THRESHOLD = 96
2
+ COVERAGE_THRESHOLD = 95
3
3
  require 'simplecov'
4
4
  require 'simplecov-rcov'
5
5
  require 'coveralls'
data/test/helper.rb CHANGED
@@ -13,7 +13,7 @@ require 'geoip'
13
13
  require 'coverage_loader'
14
14
  require 'vcr_loader'
15
15
  require 'test/unit'
16
- require 'mocha/setup'
16
+ require 'mocha/test_unit'
17
17
  require 'net/http'
18
18
 
19
19
  require File.join(File.dirname(__FILE__), '../lib/geokit.rb')
@@ -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}/#{URI.escape(@full_address)}?key=#{key}&o=xml"
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}/#{URI.escape(address)}?key=#{key}&o=xml"
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}/#{URI.escape(address)}?key=#{key}&o=xml"
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}/#{URI.escape(address)}?key=#{key}&o=xml"
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
@@ -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)
@@ -17,6 +17,7 @@ class FCCGeocoderTest < BaseGeocoderTest #:nodoc: all
17
17
  assert_url url
18
18
  assert_equal res.country_code, 'US'
19
19
  assert_equal res.state, 'CA'
20
+ assert_equal res.county, 'Los Angeles'
20
21
  assert_equal res.district, 'Los Angeles'
21
22
  end
22
23
  end
@@ -88,6 +88,7 @@ class GeoLocTest < Test::Unit::TestCase #:nodoc: all
88
88
  assert_equal [
89
89
  'city', 'San Francisco',
90
90
  'country_code', 'US',
91
+ 'county', '',
91
92
  'full_address', '',
92
93
  'lat', '',
93
94
  'lng', '',
@@ -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 = 'https://maps.google.com/maps/api/geocode/json?sensor=false&address=austin&components=administrative_area:il%7Ccountry:us'
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 test_free_geo_ip_geocode
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 test_free_geo_ip_geocode
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
 
@@ -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
- assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@address)
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 NameError do
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
- Geokit::Geocoders::MultiGeocoder.geocode(@address, provider_order: [:mapbox])
104
- Geokit::Geocoders::MultiGeocoder.reverse_geocode(@latlng, provider_order: [:mapbox])
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
- assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@ip_address)
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 "Calle De Zurbano, Chamberí, Madrid, Community of Madrid, 28036, ES", res.full_address
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 "Прилепски Бранители, Prilep, Pelagonia Region, MK", res.full_address
86
- assert_equal "Прилепски Бранители", res.street_address
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 "улица Новый Арбат, 24", res.street_address
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 "улица Станиславского, 21", res.street_address
55
- assert_equal "Ростов на Дону", res.city
56
- assert_equal "Ростовская область", res.state
57
- assert_equal "городской округ Ростов-на-Дону", res.district
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.13.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: 2018-07-17 00:00:00.000000000 Z
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: coveralls
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: '2'
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: '2'
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/test_free_geo_ip_geocoder.rb
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: 1.9.3
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
- rubyforge_project:
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/test_free_geo_ip_geocoder.rb
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,12 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.0
4
- - 2.1
5
- - 2.2
6
- - 2.3.0
7
- script: "bundle exec rake test"
8
- notifications:
9
- email:
10
- - michael+geokit@noack.com.au
11
- sudo: false
12
- cache: bundler
@@ -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