geokit 1.8.5 → 1.9.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 (76) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +0 -1
  3. data/CHANGELOG.md +7 -0
  4. data/README.markdown +31 -14
  5. data/fixtures/vcr_cassettes/geonames_geocode.yml +1 -1
  6. data/fixtures/vcr_cassettes/geonames_geocode_premium.yml +42 -0
  7. data/fixtures/vcr_cassettes/google_country_code_biased_result_orly.yml +160 -0
  8. data/fixtures/vcr_cassettes/google_country_code_biased_result_toledo.yml +111 -0
  9. data/fixtures/vcr_cassettes/google_result_toledo_default_bias.yml +275 -0
  10. data/fixtures/vcr_cassettes/google_sublocality.yml +126 -0
  11. data/fixtures/vcr_cassettes/mapbox_forward_geocode.yml +59 -0
  12. data/fixtures/vcr_cassettes/mapbox_reverse_geocode.yml +63 -0
  13. data/fixtures/vcr_cassettes/opencage_city.yml +51 -0
  14. data/fixtures/vcr_cassettes/opencage_full.yml +65 -0
  15. data/fixtures/vcr_cassettes/opencage_language_response_es.yml +66 -0
  16. data/fixtures/vcr_cassettes/opencage_reverse_madrid.yml +51 -0
  17. data/fixtures/vcr_cassettes/opencage_reverse_prilep.yml +53 -0
  18. data/geokit.gemspec +5 -3
  19. data/lib/geokit/bounds.rb +40 -31
  20. data/lib/geokit/core_ext.rb +1 -1
  21. data/lib/geokit/geo_loc.rb +63 -41
  22. data/lib/geokit/geocoders.rb +13 -13
  23. data/lib/geokit/geocoders/bing.rb +9 -9
  24. data/lib/geokit/geocoders/ca_geocoder.rb +29 -29
  25. data/lib/geokit/geocoders/fcc.rb +4 -4
  26. data/lib/geokit/geocoders/free_geo_ip.rb +6 -7
  27. data/lib/geokit/geocoders/geo_plugin.rb +5 -6
  28. data/lib/geokit/geocoders/geocodio.rb +2 -2
  29. data/lib/geokit/geocoders/geonames.rb +18 -12
  30. data/lib/geokit/geocoders/google.rb +31 -30
  31. data/lib/geokit/geocoders/ip.rb +3 -4
  32. data/lib/geokit/geocoders/mapbox.rb +94 -0
  33. data/lib/geokit/geocoders/mapquest.rb +5 -5
  34. data/lib/geokit/geocoders/opencage.rb +93 -0
  35. data/lib/geokit/geocoders/openstreetmap.rb +9 -6
  36. data/lib/geokit/geocoders/ripe.rb +3 -3
  37. data/lib/geokit/geocoders/us_geocoder.rb +10 -9
  38. data/lib/geokit/geocoders/yahoo.rb +33 -34
  39. data/lib/geokit/geocoders/yandex.rb +17 -17
  40. data/lib/geokit/inflectors.rb +4 -10
  41. data/lib/geokit/lat_lng.rb +50 -26
  42. data/lib/geokit/mappable.rb +83 -83
  43. data/lib/geokit/multi_geocoder.rb +25 -20
  44. data/lib/geokit/net_adapter/net_http.rb +7 -4
  45. data/lib/geokit/polygon.rb +36 -4
  46. data/lib/geokit/version.rb +1 -1
  47. data/test/helper.rb +15 -13
  48. data/test/test_base_geocoder.rb +6 -7
  49. data/test/test_bing_geocoder.rb +20 -21
  50. data/test/test_bounds.rb +26 -28
  51. data/test/test_ca_geocoder.rb +9 -10
  52. data/test/test_fcc_geocoder.rb +1 -1
  53. data/test/test_free_geo_ip_geocoder.rb +1 -1
  54. data/test/test_geo_plugin_geocoder.rb +9 -9
  55. data/test/test_geoloc.rb +7 -6
  56. data/test/test_geonames_geocoder.rb +28 -6
  57. data/test/test_google_geocoder.rb +210 -176
  58. data/test/test_inflector.rb +0 -1
  59. data/test/test_ipgeocoder.rb +17 -18
  60. data/test/test_latlng.rb +105 -85
  61. data/test/test_map_quest.rb +18 -21
  62. data/test/test_mapbox_geocoder.rb +31 -0
  63. data/test/test_mappable.rb +46 -0
  64. data/test/test_maxmind_geocoder.rb +1 -3
  65. data/test/test_multi_geocoder.rb +8 -9
  66. data/test/test_multi_ip_geocoder.rb +3 -5
  67. data/test/test_net_adapter.rb +4 -4
  68. data/test/test_opencage_geocoder.rb +108 -0
  69. data/test/test_openstreetmap_geocoder.rb +62 -44
  70. data/test/{test_polygon_contains.rb → test_polygon.rb} +30 -20
  71. data/test/test_ripe_geocoder.rb +2 -0
  72. data/test/test_us_geocoder.rb +7 -8
  73. data/test/test_yahoo_geocoder.rb +20 -21
  74. data/test/test_yandex_geocoder.rb +34 -35
  75. metadata +79 -56
  76. data/fixtures/vcr_cassettes/google_country_code_biased_result.yml +0 -401
@@ -0,0 +1,31 @@
1
+ require File.join(File.dirname(__FILE__), 'helper')
2
+
3
+ Geokit::Geocoders::MapboxGeocoder.key = ''
4
+
5
+ class MapboxGeocoderTest < BaseGeocoderTest #:nodoc: all
6
+ def setup
7
+ super
8
+ @address = '1714 14th Street NW, Washington, DC'
9
+ @latlng = Geokit::LatLng.new(38.913175, -77.032458)
10
+ end
11
+
12
+ def test_forward_geocode
13
+ VCR.use_cassette('mapbox_forward_geocode') do
14
+ res = Geokit::Geocoders::MapboxGeocoder.geocode(@address)
15
+ assert_equal res.lat, 38.899393
16
+ assert_equal res.lng, -76.992695
17
+ assert_equal res.country_code, 'US'
18
+ assert_equal res.state, 'District of Columbia'
19
+ assert_equal res.zip, '20002'
20
+ end
21
+ end
22
+
23
+ def test_reverse_geocode
24
+ VCR.use_cassette('mapbox_reverse_geocode') do
25
+ res = Geokit::Geocoders::MapboxGeocoder.reverse_geocode(@latlng)
26
+ assert_equal res.country_code, 'US'
27
+ assert_equal res.state, 'District of Columbia'
28
+ assert_equal res.zip, '20009'
29
+ end
30
+ end
31
+ end
@@ -1,6 +1,10 @@
1
1
  require File.join(File.dirname(__FILE__), 'helper')
2
2
 
3
+ # Test distances from http://www.csgnetwork.com/degreelenllavcalc.html
3
4
  class MappableTest < Test::Unit::TestCase #:nodoc: all
5
+ class TestMappable
6
+ include Geokit::Mappable
7
+ end
4
8
 
5
9
  def test_math_error_classes
6
10
  error_case = 0.49 * 180
@@ -9,4 +13,46 @@ class MappableTest < Test::Unit::TestCase #:nodoc: all
9
13
  assert_equal 0.0, Geokit::LatLng.distance_between_sphere(from, to, :kms)
10
14
  end
11
15
 
16
+ def test_units_sphere_multiplier
17
+ delta = 0.001
18
+ assert_in_delta 3963.190, TestMappable.units_sphere_multiplier(:miles), delta
19
+ assert_in_delta 6376.773, TestMappable.units_sphere_multiplier(:kms), delta
20
+ assert_in_delta 3443.918, TestMappable.units_sphere_multiplier(:nms), delta
21
+ end
22
+
23
+ def test_units_per_latitude_degree
24
+ delta = 0.00001
25
+ assert_in_delta 69.10000, TestMappable.units_per_latitude_degree(:miles), delta
26
+ assert_in_delta 111.18190, TestMappable.units_per_latitude_degree(:kms), delta
27
+ assert_in_delta 60.04625, TestMappable.units_per_latitude_degree(:nms), delta
28
+ end
29
+
30
+ def test_units_per_longitude_degree_miles
31
+ delta = 0.2
32
+ assert_in_delta 69.170565, TestMappable.units_per_longitude_degree( 0, :miles), delta
33
+ assert_in_delta 66.828621, TestMappable.units_per_longitude_degree( 15, :miles), delta
34
+ assert_in_delta 59.953655, TestMappable.units_per_longitude_degree( 30, :miles), delta
35
+ assert_in_delta 48.993036, TestMappable.units_per_longitude_degree( 45, :miles), delta
36
+ assert_in_delta 34.672430, TestMappable.units_per_longitude_degree( 60, :miles), delta
37
+ assert_in_delta 17.958830, TestMappable.units_per_longitude_degree( 75, :miles), delta
38
+ assert_in_delta 0.000000, TestMappable.units_per_longitude_degree( 90, :miles), delta
39
+ end
40
+
41
+ def test_units_per_longitude_degree_kms
42
+ delta = 0.2
43
+ assert_in_delta 111.319458, TestMappable.units_per_longitude_degree( 0, :kms), delta
44
+ assert_in_delta 107.550455, TestMappable.units_per_longitude_degree( 15, :kms), delta
45
+ assert_in_delta 96.486248, TestMappable.units_per_longitude_degree( 30, :kms), delta
46
+ assert_in_delta 78.846806, TestMappable.units_per_longitude_degree( 45, :kms), delta
47
+ assert_in_delta 55.799979, TestMappable.units_per_longitude_degree( 60, :kms), delta
48
+ assert_in_delta 28.901993, TestMappable.units_per_longitude_degree( 75, :kms), delta
49
+ assert_in_delta 0.000000, TestMappable.units_per_longitude_degree( 90, :kms), delta
50
+ end
51
+
52
+ def test_units_per_longitude_degree_nms
53
+ delta = 0.2
54
+ assert_in_delta 60.107578, TestMappable.units_per_longitude_degree( 0, :nms), delta
55
+ assert_in_delta 42.573784, TestMappable.units_per_longitude_degree( 45, :nms), delta
56
+ assert_in_delta 0.000000, TestMappable.units_per_longitude_degree( 90, :nms), delta
57
+ end
12
58
  end
@@ -1,7 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), 'helper')
2
2
 
3
3
  class MaxmindGeocoderTest < BaseGeocoderTest #:nodoc: all
4
-
5
4
  def setup
6
5
  super
7
6
  @ip = '118.210.47.142'
@@ -44,5 +43,4 @@ class MaxmindGeocoderTest < BaseGeocoderTest #:nodoc: all
44
43
  assert_equal true, res.success
45
44
  assert res.city
46
45
  end
47
-
48
- end
46
+ end
@@ -1,9 +1,8 @@
1
1
  require File.join(File.dirname(__FILE__), 'helper')
2
2
 
3
- Geokit::Geocoders::provider_order=[:google, :bing, :us]
3
+ Geokit::Geocoders.provider_order = [:google, :bing, :us]
4
4
 
5
5
  class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
6
-
7
6
  def setup
8
7
  super
9
8
  @failure = Geokit::GeoLoc.new
@@ -35,7 +34,7 @@ class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
35
34
  end
36
35
 
37
36
  def test_invalid_provider
38
- temp = Geokit::Geocoders::provider_order
37
+ temp = Geokit::Geocoders.provider_order
39
38
  Geokit::Geocoders.provider_order = [:bogus]
40
39
  assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@address)
41
40
  Geokit::Geocoders.provider_order = temp
@@ -45,9 +44,9 @@ class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
45
44
  t1, t2 = Geokit::Geocoders.provider_order, Geokit::Geocoders.ip_provider_order # will need to reset after
46
45
  Geokit::Geocoders.provider_order = [:google]
47
46
  Geokit::Geocoders.ip_provider_order = [:geo_plugin]
48
- Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with("").returns(@failure)
47
+ Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with('').returns(@failure)
49
48
  Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).never
50
- assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode("")
49
+ assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode('')
51
50
  Geokit::Geocoders.provider_order, Geokit::Geocoders.ip_provider_order = t1, t2 # reset to orig values
52
51
  end
53
52
 
@@ -77,7 +76,7 @@ class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
77
76
  end
78
77
 
79
78
  def test_reverse_geocode_with_invalid_provider
80
- temp = Geokit::Geocoders::provider_order
79
+ temp = Geokit::Geocoders.provider_order
81
80
  Geokit::Geocoders.provider_order = [:bogus]
82
81
  assert_raise NameError do
83
82
  Geokit::Geocoders::MultiGeocoder.reverse_geocode(@latlng)
@@ -88,8 +87,8 @@ class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
88
87
  def test_reverse_geocode_with_blank_latlng
89
88
  t1 = Geokit::Geocoders.provider_order # will need to reset after
90
89
  Geokit::Geocoders.provider_order = [:google]
91
- Geokit::Geocoders::GoogleGeocoder.expects(:reverse_geocode).with("").returns(@failure)
92
- assert_equal @failure, Geokit::Geocoders::MultiGeocoder.reverse_geocode("")
90
+ Geokit::Geocoders::GoogleGeocoder.expects(:reverse_geocode).with('').returns(@failure)
91
+ assert_equal @failure, Geokit::Geocoders::MultiGeocoder.reverse_geocode('')
93
92
  Geokit::Geocoders.provider_order = t1 # reset to orig values
94
93
  end
95
94
 
@@ -97,6 +96,6 @@ class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all
97
96
  Geokit::Geocoders::YahooGeocoder.expects(:geocode).with(@address, {}).returns(@success)
98
97
  Geokit::Geocoders::GoogleGeocoder.expects(:geocode).never
99
98
  Geokit::Geocoders::UsGeocoder.expects(:geocode).never
100
- assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@address, :provider_order => [:yahoo, :google, :us])
99
+ assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@address, provider_order: [:yahoo, :google, :us])
101
100
  end
102
101
  end
@@ -1,12 +1,11 @@
1
1
  require File.join(File.dirname(__FILE__), 'helper')
2
2
 
3
- Geokit::Geocoders::ip_provider_order=[:geo_plugin,:ip]
3
+ Geokit::Geocoders.ip_provider_order = [:geo_plugin, :ip]
4
4
 
5
5
  class MultiIpGeocoderTest < BaseGeocoderTest #:nodoc: all
6
-
7
6
  def setup
8
7
  @ip_address = '10.10.10.10'
9
- @success = Geokit::GeoLoc.new({:city=>"SAN FRANCISCO", :state=>"CA", :country_code=>"US", :lat=>37.7742, :lng=>-122.417068})
8
+ @success = Geokit::GeoLoc.new({city: 'SAN FRANCISCO', state: 'CA', country_code: 'US', lat: 37.7742, lng: -122.417068})
10
9
  @success.success = true
11
10
  @failure = Geokit::GeoLoc.new
12
11
  end
@@ -29,10 +28,9 @@ class MultiIpGeocoderTest < BaseGeocoderTest #:nodoc: all
29
28
  end
30
29
 
31
30
  def test_invalid_provider
32
- temp = Geokit::Geocoders::ip_provider_order
31
+ temp = Geokit::Geocoders.ip_provider_order
33
32
  Geokit::Geocoders.ip_provider_order = [:bogus]
34
33
  assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@ip_address)
35
34
  Geokit::Geocoders.ip_provider_order = temp
36
35
  end
37
-
38
36
  end
@@ -23,7 +23,7 @@ class NetAdapterTest < Test::Unit::TestCase #:nodoc: all
23
23
  end
24
24
 
25
25
  RESULT = '{"name":"json"}'
26
- RESULT_HASH = {"name" => "json"}
26
+ RESULT_HASH = {'name' => 'json'}
27
27
 
28
28
  # Defines common test fixtures.
29
29
  def setup
@@ -32,8 +32,8 @@ class NetAdapterTest < Test::Unit::TestCase #:nodoc: all
32
32
  end
33
33
 
34
34
  def test_cache
35
- old_adapter = Geokit::Geocoders::net_adapter
36
- Geokit::Geocoders::net_adapter = Geokit::NetAdapter::Typhoeus
35
+ old_adapter = Geokit::Geocoders.net_adapter
36
+ Geokit::Geocoders.net_adapter = Geokit::NetAdapter::Typhoeus
37
37
  Typhoeus::Config.cache = SuperSimpleCache
38
38
  success = MockSuccess.new
39
39
  success.expects(:body).returns(RESULT)
@@ -41,6 +41,6 @@ class NetAdapterTest < Test::Unit::TestCase #:nodoc: all
41
41
  Geokit::NetAdapter::Typhoeus.expects(:do_get).with(@url).returns(success)
42
42
  assert_equal RESULT_HASH, Geokit::Geocoders::CachedGeocoder.process(:json, @url)
43
43
  Typhoeus::Config.cache = nil
44
- Geokit::Geocoders::net_adapter = old_adapter
44
+ Geokit::Geocoders.net_adapter = old_adapter
45
45
  end
46
46
  end
@@ -0,0 +1,108 @@
1
+ # encoding: utf-8
2
+ require File.join(File.dirname(__FILE__), 'helper')
3
+
4
+ class OpencageGeocoderTest < BaseGeocoderTest #:nodoc: all
5
+ def setup
6
+ super
7
+ @opencage_full_hash = {street_address: '100 Spear St', city: 'San Francisco', state: 'CA', zip: '94105', country_code: 'US'}
8
+ @opencage_city_hash = {city: 'San Francisco', state: 'CA'}
9
+ @opencage_full_loc = Geokit::GeoLoc.new(@opencage_full_hash)
10
+ @opencage_city_loc = Geokit::GeoLoc.new(@opencage_city_hash)
11
+
12
+ # Note: This is not a real key because having real keys on github
13
+ # is not advised
14
+ key = 'someopencageapikey'
15
+ Geokit::Geocoders::OpencageGeocoder.key = key
16
+ end
17
+
18
+ def test_opencage_full_address
19
+ VCR.use_cassette('opencage_full') do
20
+ url = 'https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&query=100+Spear+St%2C+San+Francisco%2C+CA%2C+94105%2C+US&no_annotations=1'
21
+ TestHelper.expects(:last_url).with(url)
22
+ res = Geokit::Geocoders::OpencageGeocoder.geocode(@opencage_full_loc)
23
+
24
+ assert_equal 'California', res.state
25
+ assert_equal 'San Francisco', res.city
26
+ assert_array_in_delta [37.7921509, -122.394], res.to_a
27
+ assert res.is_us?
28
+ assert_equal 'Spear Street 100, San Francisco, California, 94103, US', res.full_address
29
+ assert_equal 'opencage', res.provider
30
+ end
31
+ end
32
+
33
+ def test_opencage_city
34
+ VCR.use_cassette('opencage_city') do
35
+ url = 'https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&query=San+Francisco%2C+CA&no_annotations=1'
36
+ TestHelper.expects(:last_url).with(url)
37
+ res = Geokit::Geocoders::OpencageGeocoder.geocode(@opencage_city_loc)
38
+
39
+ assert_equal 'California', res.state
40
+ assert_equal 'San Francisco', res.city
41
+ assert_array_in_delta [37.7792768, -122.4192704], res.to_a
42
+ assert res.is_us?
43
+ assert_equal 'San Francisco, California, US', res.full_address
44
+ assert_equal 'opencage', res.provider
45
+ end
46
+ end
47
+
48
+ def test_opencage_reverse
49
+ VCR.use_cassette('opencage_reverse_madrid') do
50
+
51
+ location = Geokit::GeoLoc.new
52
+ location.lat, location.lng = '40.4167413', '-3.7032498' # Madrid
53
+
54
+ url = 'https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&query=40.4167413%2C-3.7032498&no_annotations=1'
55
+ TestHelper.expects(:last_url).with(url)
56
+ res = Geokit::Geocoders::OpencageGeocoder.geocode(location.ll)
57
+
58
+ assert_equal 'ES', res.country_code
59
+ assert_equal 'opencage', res.provider
60
+
61
+ assert_equal 'Madrid', res.city
62
+ assert_equal 'Community of Madrid', res.state
63
+
64
+ assert_equal 'Spain', res.country
65
+ assert_equal true, res.success
66
+
67
+ assert_equal 'Calle De Zurbano, Chamberí, Madrid, Community of Madrid, 28036, ES', res.full_address
68
+ assert_equal 28036, res.zip
69
+ assert_equal 'Calle De Zurbano', res.street_address
70
+ end
71
+ end
72
+
73
+ def test_opencage_reverse2
74
+ VCR.use_cassette('opencage_reverse_prilep') do
75
+
76
+ location = Geokit::GeoLoc.new
77
+ location.lat, location.lng = '41.3527177', '21.5497808'
78
+
79
+ url = 'https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&query=41.3527177%2C21.5497808&no_annotations=1'
80
+ TestHelper.expects(:last_url).with(url)
81
+ res = Geokit::Geocoders::OpencageGeocoder.geocode(location.ll)
82
+
83
+ assert_equal 'MK', res.country_code
84
+ assert_equal 'opencage', res.provider
85
+
86
+ assert_equal 'Prilep', res.city
87
+ assert_equal 'Pelagonia Region', res.state
88
+
89
+ assert_equal 'Macedonia', res.country
90
+ assert_equal 10, res.precision
91
+ assert_equal true, res.success
92
+
93
+ assert_equal 'Прилепски Бранители, Prilep, Pelagonia Region, MK', res.full_address
94
+ assert_equal 'Прилепски Бранители', res.street_address
95
+ end
96
+ end
97
+
98
+ # check if the results are in Spanish if &language=es
99
+ def test_language_response
100
+ VCR.use_cassette('opencage_language_response_es') do
101
+ url = 'https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&language=es&query=London&no_annotations=1'
102
+ TestHelper.expects(:last_url).with(url)
103
+ language_result = Geokit::Geocoders::OpencageGeocoder.geocode('London', language: 'es')
104
+
105
+ assert_equal 'Londres', language_result.city
106
+ end
107
+ end
108
+ end
@@ -2,27 +2,26 @@
2
2
  require File.join(File.dirname(__FILE__), 'helper')
3
3
 
4
4
  class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
5
- OSM_FULL=<<-EOF.strip
5
+ OSM_FULL = <<-EOF.strip
6
6
  [{"place_id":"425554497","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","boundingbox":["37.792341","37.792441","-122.394074","-122.393974"],"lat":"37.792391","lon":"-122.394024","display_name":"100, Spear Street, Financial District, San Francisco, California, 94105, United States of America","class":"place","type":"house","address":{"house_number":"100","road":"Spear Street","place":"Financial District","city":"San Francisco","county":"San Francisco","state":"California","postcode":"94105","country":"United States of America","country_code":"us"}}]
7
7
  EOF
8
8
 
9
-
10
- OSM_CITY=<<-EOF.strip
9
+ OSM_CITY = <<-EOF.strip
11
10
  [{"place_id":"1586484","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"316944780","boundingbox":["37.7240965271","37.744100341797","-122.40126586914","-122.38125823975"],"lat":"37.7340974","lon":"-122.3912596","display_name":"San Francisco, California, United States of America","class":"place","type":"county","icon":"http://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png","address":{"county":"San Francisco","state":"California","country":"United States of America","country_code":"us"}},{"place_id":"42109083","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"33090874","boundingbox":["37.6398277282715","37.8230590820312","-123.173828125","-122.935707092285"],"lat":"37.7333682068208","lon":"-123.051926367593","display_name":"San Francisco, Marin, California, United States of America","class":"place","type":"city","icon":"http://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png","address":{"city":"San Francisco","county":"Marin","state":"California","country":"United States of America","country_code":"us"}},{"place_id":"145970","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"26819236","boundingbox":["37.768957366943","37.788961181641","-122.42920471191","-122.40919708252"],"lat":"37.7789601","lon":"-122.419199","display_name":"San Francisco, San Francisco County, California, United States of America, North America","class":"place","type":"city","icon":"http://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png","address":{"city":"San Francisco","county":"San Francisco County","state":"California","country":"United States of America","country_code":"us","place":"North America"}},{"place_id":"42108900","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"33090814","boundingbox":["37.7067184448242","37.9298248291016","-122.612289428711","-122.281776428223"],"lat":"37.7782304646168","lon":"-122.442503042395","display_name":"San Francisco, San Francisco County, California, United States of America","class":"place","type":"city","icon":"http://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png","address":{"city":"San Francisco","county":"San Francisco County","state":"California","country":"United States of America","country_code":"us"}}]
12
11
  EOF
13
12
 
14
- OSM_REVERSE_MADRID=<<-EOF.strip
13
+ OSM_REVERSE_MADRID = <<-EOF.strip
15
14
  {"place_id":"41067113","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"31822457","lat":"40.3787537310091","lon":"-3.70187699287946","display_name":"Línea 3, Calle del Doctor Tolosa Latour, Usera, Madrid, 28026, Spain","address":{"subway":"Línea 3","road":"Calle del Doctor Tolosa Latour","suburb":"Usera","city_district":"Usera","city":"Madrid","county":"Madrid","state":"Madrid","postcode":"28026","country":"Spain","country_code":"es"}}
16
15
  EOF
17
16
 
18
- OSM_REVERSE_PRILEP=<<-EOF.strip
17
+ OSM_REVERSE_PRILEP = <<-EOF.strip
19
18
  {"place_id":"46960069","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"39757255","lat":"41.3508581896005","lon":"21.549896984439","display_name":"Gimnasium Mirche Acev, Marksova, Prilep, Macedonia","address":{"school":"Gimnasium Mirche Acev","road":"Marksova","city":"Prilep","country":"Macedonia","country_code":"mk"}}
20
19
  EOF
21
20
 
22
21
  def setup
23
22
  super
24
- @osm_full_hash = {:street_address=>"100 Spear St", :city=>"San Francisco", :state=>"CA", :zip=>"94105", :country_code=>"US"}
25
- @osm_city_hash = {:city=>"San Francisco", :state=>"CA"}
23
+ @osm_full_hash = {street_address: '100 Spear St', city: 'San Francisco', state: 'CA', zip: '94105', country_code: 'US'}
24
+ @osm_city_hash = {city: 'San Francisco', state: 'CA'}
26
25
  @osm_full_loc = Geokit::GeoLoc.new(@osm_full_hash)
27
26
  @osm_city_loc = Geokit::GeoLoc.new(@osm_city_hash)
28
27
  end
@@ -31,7 +30,7 @@ class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
31
30
  def test_osm_full_address
32
31
  response = MockSuccess.new
33
32
  response.expects(:body).returns(OSM_FULL)
34
- url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
33
+ url = "http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
35
34
  Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
36
35
  do_full_address_assertions(Geokit::Geocoders::OSMGeocoder.geocode(@full_address_short_zip))
37
36
  end
@@ -39,7 +38,7 @@ class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
39
38
  def test_osm_full_address_accuracy
40
39
  response = MockSuccess.new
41
40
  response.expects(:body).returns(OSM_FULL)
42
- url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
41
+ url = "http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
43
42
  Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
44
43
  res = Geokit::Geocoders::OSMGeocoder.geocode(@full_address_short_zip)
45
44
  assert_equal 'house', res.accuracy
@@ -48,7 +47,7 @@ class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
48
47
  def test_osm_full_address_with_geo_loc
49
48
  response = MockSuccess.new
50
49
  response.expects(:body).returns(OSM_FULL)
51
- url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
50
+ url = "http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
52
51
  Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
53
52
  do_full_address_assertions(Geokit::Geocoders::OSMGeocoder.geocode(@osm_full_loc))
54
53
  end
@@ -56,24 +55,32 @@ class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
56
55
  def test_osm_city
57
56
  response = MockSuccess.new
58
57
  response.expects(:body).returns(OSM_CITY)
59
- url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
58
+ url = "http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
60
59
  Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
61
60
  do_city_assertions(Geokit::Geocoders::OSMGeocoder.geocode(@address))
62
61
  end
63
62
 
63
+ def test_osm_city_with_accept_language
64
+ response = MockSuccess.new
65
+ response.expects(:body).returns(OSM_CITY)
66
+ url = "http://nominatim.openstreetmap.org/search?format=json&polygon=0&accept-language=pt-br&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
67
+ Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
68
+ do_city_assertions(Geokit::Geocoders::OSMGeocoder.geocode(@address, {:'accept-language' => 'pt-br'}))
69
+ end
70
+
64
71
  def test_osm_city_accuracy
65
72
  response = MockSuccess.new
66
73
  response.expects(:body).returns(OSM_CITY)
67
- url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
74
+ url = "http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
68
75
  Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
69
76
  res = Geokit::Geocoders::OSMGeocoder.geocode(@address)
70
- assert_equal "county", res.accuracy
77
+ assert_equal 'county', res.accuracy
71
78
  end
72
79
 
73
80
  def test_osm_city_with_geo_loc
74
81
  response = MockSuccess.new
75
82
  response.expects(:body).returns(OSM_CITY)
76
- url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
83
+ url = "http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
77
84
  Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
78
85
  do_city_assertions(Geokit::Geocoders::OSMGeocoder.geocode(@osm_city_loc))
79
86
  end
@@ -82,26 +89,26 @@ class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
82
89
  response = MockSuccess.new
83
90
  response.expects(:body).returns(OSM_REVERSE_PRILEP)
84
91
  prilep = Geokit::GeoLoc.new
85
- prilep.lat, prilep.lng = "41.3527177", "21.5497808"
92
+ prilep.lat, prilep.lng = '41.3527177', '21.5497808'
86
93
  url = "http://nominatim.openstreetmap.org/reverse?format=json&addressdetails=1&lat=#{prilep.lat}&lon=#{prilep.lng}"
87
94
  Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
88
95
  res = Geokit::Geocoders::OSMGeocoder.do_reverse_geocode(prilep.ll)
89
96
 
90
- #OSM does not return the exast lat lng in response
91
- #assert_equal prilep.lat.to_s.slice(1..5), res.lat.to_s.slice(1..5)
92
- #assert_equal prilep.lng.to_s.slice(1..5), res.lng.to_s.slice(1..5)
93
- assert_equal "MK", res.country_code
94
- assert_equal "osm", res.provider
97
+ # OSM does not return the exast lat lng in response
98
+ # assert_equal prilep.lat.to_s.slice(1..5), res.lat.to_s.slice(1..5)
99
+ # assert_equal prilep.lng.to_s.slice(1..5), res.lng.to_s.slice(1..5)
100
+ assert_equal 'MK', res.country_code
101
+ assert_equal 'osm', res.provider
95
102
 
96
- assert_equal "Prilep", res.city
103
+ assert_equal 'Prilep', res.city
97
104
  assert_nil res.state
98
105
 
99
- assert_equal "Macedonia", res.country
106
+ assert_equal 'Macedonia', res.country
100
107
  assert_nil res.precision
101
108
  assert_equal true, res.success
102
109
 
103
- assert_equal "Marksova, Prilep, MK", res.full_address
104
- assert_equal "Marksova", res.street_address
110
+ assert_equal 'Marksova, Prilep, MK', res.full_address
111
+ assert_equal 'Marksova', res.street_address
105
112
  end
106
113
 
107
114
  def test_reverse_geo_code
@@ -109,28 +116,39 @@ class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
109
116
  response.expects(:body).returns(OSM_REVERSE_MADRID)
110
117
  location = Geokit::GeoLoc.new
111
118
  # Madrid
112
- location.lat, location.lng = "40.4167413", "-3.7032498"
119
+ location.lat, location.lng = '40.4167413', '-3.7032498'
113
120
  url = "http://nominatim.openstreetmap.org/reverse?format=json&addressdetails=1&lat=#{location.lat}&lon=#{location.lng}"
114
121
  Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
115
122
  res = Geokit::Geocoders::OSMGeocoder.do_reverse_geocode(location.ll)
116
123
 
117
- assert_equal "ES", res.country_code
118
- assert_equal "osm", res.provider
124
+ assert_equal 'ES', res.country_code
125
+ assert_equal 'osm', res.provider
119
126
 
120
- assert_equal "Madrid", res.city
121
- assert_equal "Madrid", res.state
127
+ assert_equal 'Madrid', res.city
128
+ assert_equal 'Madrid', res.state
122
129
 
123
- assert_equal "Spain", res.country
130
+ assert_equal 'Spain', res.country
124
131
  assert_equal true, res.success
125
132
 
126
- assert_equal "Calle Del Doctor Tolosa Latour, Usera, Madrid, Madrid, 28026, ES", res.full_address
127
- assert_equal "28026", res.zip
128
- assert_equal "Calle Del Doctor Tolosa Latour", res.street_address
133
+ assert_equal 'Calle Del Doctor Tolosa Latour, Usera, Madrid, Madrid, 28026, ES', res.full_address
134
+ assert_equal '28026', res.zip
135
+ assert_equal 'Calle Del Doctor Tolosa Latour', res.street_address
136
+ end
137
+
138
+ def test_reverse_geo_code_with_accept_language
139
+ response = MockSuccess.new
140
+ response.expects(:body).returns(OSM_REVERSE_MADRID)
141
+ location = Geokit::GeoLoc.new
142
+ # Madrid
143
+ location.lat, location.lng = '40.4167413', '-3.7032498'
144
+ url = "http://nominatim.openstreetmap.org/reverse?format=json&addressdetails=1&lat=#{location.lat}&lon=#{location.lng}&accept-language=pt-br"
145
+ Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
146
+ Geokit::Geocoders::OSMGeocoder.do_reverse_geocode(location.ll, {:'accept-language' => 'pt-br'})
129
147
  end
130
148
 
131
149
  def test_service_unavailable
132
150
  response = MockFailure.new
133
- url = url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
151
+ url = url = "http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
134
152
  Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
135
153
  assert !Geokit::Geocoders::OSMGeocoder.geocode(@osm_city_loc).success
136
154
  end
@@ -139,21 +157,21 @@ class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
139
157
 
140
158
  # next two methods do the assertions for both address-level and city-level lookups
141
159
  def do_full_address_assertions(res)
142
- assert_equal "California", res.state
143
- assert_equal "San Francisco", res.city
144
- assert_equal "37.792391,-122.394024", res.ll
160
+ assert_equal 'California', res.state
161
+ assert_equal 'San Francisco', res.city
162
+ assert_equal '37.792391,-122.394024', res.ll
145
163
  assert res.is_us?
146
- assert_equal "Spear Street 100, San Francisco, California, 94105, US", res.full_address
147
- assert_equal "osm", res.provider
164
+ assert_equal 'Spear Street 100, San Francisco, California, 94105, US', res.full_address
165
+ assert_equal 'osm', res.provider
148
166
  end
149
167
 
150
168
  def do_city_assertions(res)
151
- assert_equal "California", res.state
152
- assert_equal "San Francisco", res.city
153
- assert_equal "37.7340974,-122.3912596", res.ll
169
+ assert_equal 'California', res.state
170
+ assert_equal 'San Francisco', res.city
171
+ assert_equal '37.7340974,-122.3912596', res.ll
154
172
  assert res.is_us?
155
- assert_equal "San Francisco, California, US", res.full_address
173
+ assert_equal 'San Francisco, California, US', res.full_address
156
174
  assert_nil res.street_address
157
- assert_equal "osm", res.provider
175
+ assert_equal 'osm', res.provider
158
176
  end
159
177
  end