geokit 1.13.1 → 1.14.0

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