geokit 1.8.5 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -2,10 +2,8 @@
2
2
  require File.join(File.dirname(__FILE__), 'helper')
3
3
 
4
4
  class PolygonTest < Test::Unit::TestCase #:nodoc: all
5
-
6
5
  def setup
7
-
8
- #Create a simple square-ish polygon for easy testing
6
+ # Create a simple square-ish polygon for easy testing
9
7
  @p1 = Geokit::LatLng.new(45.3142533036254, -93.47527313511819)
10
8
  @p2 = Geokit::LatLng.new(45.31232182518015, -93.34893036168069)
11
9
  @p3 = Geokit::LatLng.new(45.23694281999268, -93.35167694371194)
@@ -18,7 +16,7 @@ class PolygonTest < Test::Unit::TestCase #:nodoc: all
18
16
  @point_inside = Geokit::LatLng.new(45.27428243796789, -93.41648483416066)
19
17
  @point_outside = Geokit::LatLng.new(45.45411010558687, -93.78151703160256)
20
18
 
21
- #Create a more complex polygon with overlapping lines. Looks like a star of david
19
+ # Create a more complex polygon with overlapping lines. Looks like a star of david
22
20
  @c1 = Geokit::LatLng.new(45.48661334374487, -93.74665833078325)
23
21
  @c2 = Geokit::LatLng.new(45.53521281284293, -93.32611083984375)
24
22
  @c3 = Geokit::LatLng.new(45.28648197278281, -93.3673095703125)
@@ -34,12 +32,12 @@ class PolygonTest < Test::Unit::TestCase #:nodoc: all
34
32
  @complex_points = [@c1, @c2, @c3, @c4, @c5, @c6, @c7, @c8, @c9, @c10, @c11]
35
33
  @complex_polygon = Geokit::Polygon.new(@complex_points)
36
34
 
37
- #Test three points that should be "inside" this complex shape
35
+ # Test three points that should be "inside" this complex shape
38
36
  @complex_inside_one = Geokit::LatLng.new(45.52438983143154, -93.59818268101662)
39
37
  @complex_inside_two = Geokit::LatLng.new(45.50321887154943, -93.37845611851662)
40
38
  @complex_inside_three = Geokit::LatLng.new(45.28334174918666, -93.59543609898537)
41
39
 
42
- #Test three points that should be "outside" this complex shape
40
+ # Test three points that should be "outside" this complex shape
43
41
  @complex_outside_one = Geokit::LatLng.new(45.45314676076135, -93.563850405626)
44
42
  @complex_outside_two = Geokit::LatLng.new(45.30435378077673, -93.6859130859375)
45
43
  @complex_outside_three = Geokit::LatLng.new(45.538820010517036, -93.486946108751)
@@ -52,34 +50,33 @@ class PolygonTest < Test::Unit::TestCase #:nodoc: all
52
50
 
53
51
  @open_points = [@op1, @op2, @op3, @op4]
54
52
  @open_polygon = Geokit::Polygon.new(@open_points)
55
-
56
53
  end
57
54
 
58
55
  def test_point_inside_poly
59
- #puts "\n\nTesting point inside poly... {@polygon.contains?(@point_inside)}\n\n"
56
+ # puts "\n\nTesting point inside poly... {@polygon.contains?(@point_inside)}\n\n"
60
57
  assert @polygon.contains?(@point_inside)
61
58
  end
62
59
 
63
60
  def test_point_outside_poly
64
- #puts "\n\nTesting point outside poly... {@polygon.contains?(@point_outside)}\n\n"
61
+ # puts "\n\nTesting point outside poly... {@polygon.contains?(@point_outside)}\n\n"
65
62
  assert !@polygon.contains?(@point_outside)
66
63
  end
67
64
 
68
65
  def test_points_inside_complex_poly
69
- #puts "\n\nTesting points INSIDE complex poly..."
70
- #puts "\tone: {@complex_polygon.contains?(@complex_inside_one)}"
71
- #puts "\ttwo: {@complex_polygon.contains?(@complex_inside_two)}"
72
- #puts "\tthree: {@complex_polygon.contains?(@complex_inside_three)}\n\n"
66
+ # puts "\n\nTesting points INSIDE complex poly..."
67
+ # puts "\tone: {@complex_polygon.contains?(@complex_inside_one)}"
68
+ # puts "\ttwo: {@complex_polygon.contains?(@complex_inside_two)}"
69
+ # puts "\tthree: {@complex_polygon.contains?(@complex_inside_three)}\n\n"
73
70
  assert @complex_polygon.contains?(@complex_inside_one)
74
71
  assert @complex_polygon.contains?(@complex_inside_two)
75
72
  assert @complex_polygon.contains?(@complex_inside_three)
76
73
  end
77
74
 
78
75
  def test_points_outside_complex_poly
79
- #puts "\n\nTesting points OUTSIDE complex poly..."
80
- #puts "\tone: {@complex_polygon.contains?(@complex_outside_one)}"
81
- #puts "\ttwo: {@complex_polygon.contains?(@complex_outside_two)}"
82
- #puts "\tthree: {@complex_polygon.contains?(@complex_outside_three)}\n\n"
76
+ # puts "\n\nTesting points OUTSIDE complex poly..."
77
+ # puts "\tone: {@complex_polygon.contains?(@complex_outside_one)}"
78
+ # puts "\ttwo: {@complex_polygon.contains?(@complex_outside_two)}"
79
+ # puts "\tthree: {@complex_polygon.contains?(@complex_outside_three)}\n\n"
83
80
  assert !@complex_polygon.contains?(@complex_outside_one)
84
81
  assert !@complex_polygon.contains?(@complex_outside_two)
85
82
  assert !@complex_polygon.contains?(@complex_outside_three)
@@ -89,13 +86,26 @@ class PolygonTest < Test::Unit::TestCase #:nodoc: all
89
86
  # A polygon can only exist of the last point is equal to the first
90
87
  # Otherwise, it would just be a line of points.
91
88
 
92
- #puts "\n\nTesting intialize function to close an open polygon..."
93
- #puts "\t Does poly_x[0] (#{@open_polygon.poly_x[0]}) == poly_x[-1] (#{@open_polygon.poly_x[-1]}) ?"
94
- #puts "\t Does poly_y[0] (#{@open_polygon.poly_y[0]}) == poly_y[-1] (#{@open_polygon.poly_y[-1]}) ?"
89
+ # puts "\n\nTesting intialize function to close an open polygon..."
90
+ # puts "\t Does poly_x[0] (#{@open_polygon.poly_x[0]}) == poly_x[-1] (#{@open_polygon.poly_x[-1]}) ?"
91
+ # puts "\t Does poly_y[0] (#{@open_polygon.poly_y[0]}) == poly_y[-1] (#{@open_polygon.poly_y[-1]}) ?"
95
92
 
96
93
  assert @open_polygon.points[0].lng == @open_polygon.points[-1].lng
97
94
  assert @open_polygon.points[0].lat == @open_polygon.points[-1].lat
95
+ end
98
96
 
97
+ def test_centroid_for_simple_poly
98
+ @polygon_centroid = Geokit::LatLng.new(45.27463866133501, -93.41400121829719)
99
+ assert_equal(@polygon.centroid, @polygon_centroid)
99
100
  end
100
101
 
102
+ def test_centroid_for_complex_poly
103
+ @complex_polygon_centroid = Geokit::LatLng.new(45.43622702936517, -93.5352210389731)
104
+ assert_equal(@complex_polygon.centroid, @complex_polygon_centroid)
105
+ end
106
+
107
+ def test_centroid_for_open_poly
108
+ @open_polygon_centroid = Geokit::LatLng.new(44.95912726688109, -92.7068888186181)
109
+ assert_equal(@open_polygon.centroid, @open_polygon_centroid)
110
+ end
101
111
  end
@@ -25,6 +25,7 @@ class RipeGeocoderTest < BaseGeocoderTest #:nodoc: all
25
25
  assert_url url
26
26
  assert_equal res.city, 'Mountain View'
27
27
  assert_equal res.state, 'CA'
28
+ assert_equal res.state_code, 'CA'
28
29
  assert_equal res.country_code, 'US'
29
30
  end
30
31
  end
@@ -36,6 +37,7 @@ class RipeGeocoderTest < BaseGeocoderTest #:nodoc: all
36
37
  assert_url url
37
38
  assert_equal res.city, 'Adelaide'
38
39
  assert_equal res.state, nil
40
+ assert_equal res.state_code, nil
39
41
  assert_equal res.country_code, 'AU'
40
42
  end
41
43
  end
@@ -3,12 +3,11 @@ require File.join(File.dirname(__FILE__), 'helper')
3
3
  Geokit::Geocoders::UsGeocoder.key = nil
4
4
 
5
5
  class UsGeocoderTest < BaseGeocoderTest #:nodoc: all
6
-
7
- GEOCODER_US_FULL='37.792528,-122.393981,100 Spear St,San Francisco,CA,94105'
6
+ GEOCODER_US_FULL = '37.792528,-122.393981,100 Spear St,San Francisco,CA,94105'
8
7
 
9
8
  def setup
10
9
  super
11
- @us_full_hash = {:city=>"San Francisco", :state=>"CA"}
10
+ @us_full_hash = {city: 'San Francisco', state: 'CA'}
12
11
  @us_full_loc = Geokit::GeoLoc.new(@us_full_hash)
13
12
  end
14
13
 
@@ -40,17 +39,17 @@ class UsGeocoderTest < BaseGeocoderTest #:nodoc: all
40
39
  response.expects(:body).returns(GEOCODER_US_FULL)
41
40
  url = "http://geocoder.us/service/csv/geocode?address=#{Geokit::Inflector.url_escape(@address)}"
42
41
  Geokit::Geocoders::UsGeocoder.expects(:call_geocoder_service).with(url).returns(response)
43
- res=Geokit::Geocoders::UsGeocoder.geocode(@address)
42
+ res = Geokit::Geocoders::UsGeocoder.geocode(@address)
44
43
  assert_equal 1, res.all.size
45
44
  end
46
45
 
47
46
  private
48
47
 
49
48
  def verify(location)
50
- assert_equal "CA", location.state
51
- assert_equal "San Francisco", location.city
52
- assert_equal "37.792528,-122.393981", location.ll
49
+ assert_equal 'CA', location.state
50
+ assert_equal 'San Francisco', location.city
51
+ assert_equal '37.792528,-122.393981', location.ll
53
52
  assert location.is_us?
54
- assert_equal "100 Spear St, San Francisco, CA, 94105, US", location.full_address #slightly different from yahoo
53
+ assert_equal '100 Spear St, San Francisco, CA, 94105, US', location.full_address # slightly different from yahoo
55
54
  end
56
55
  end
@@ -6,8 +6,8 @@ Geokit::Geocoders::YahooGeocoder.secret = 'SECRET'
6
6
  class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
7
7
  def setup
8
8
  super
9
- @yahoo_full_hash = {:street_address=>"100 Spear St", :city=>"San Francisco", :state=>"CA", :zip=>"94105-1522", :country_code=>"US"}
10
- @yahoo_city_hash = {:city=>"San Francisco", :state=>"CA"}
9
+ @yahoo_full_hash = {street_address: '100 Spear St', city: 'San Francisco', state: 'CA', zip: '94105-1522', country_code: 'US'}
10
+ @yahoo_city_hash = {city: 'San Francisco', state: 'CA'}
11
11
  @yahoo_full_loc = Geokit::GeoLoc.new(@yahoo_full_hash)
12
12
  @yahoo_city_loc = Geokit::GeoLoc.new(@yahoo_city_hash)
13
13
  end
@@ -19,7 +19,7 @@ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
19
19
  # the testing methods themselves
20
20
  def test_yahoo_full_address
21
21
  VCR.use_cassette('yahoo_full') do
22
- url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@full_address)}"
22
+ url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@full_address)}"
23
23
  do_full_address_assertions(Geokit::Geocoders::YahooGeocoder.geocode(@full_address))
24
24
  assert_yahoo_url url
25
25
  end
@@ -27,7 +27,7 @@ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
27
27
 
28
28
  def test_yahoo_full_address_accuracy
29
29
  VCR.use_cassette('yahoo_full') do
30
- url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@full_address)}"
30
+ url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@full_address)}"
31
31
  res = Geokit::Geocoders::YahooGeocoder.geocode(@full_address)
32
32
  assert_yahoo_url url
33
33
  assert_equal 8, res.accuracy
@@ -36,7 +36,7 @@ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
36
36
 
37
37
  def test_yahoo_full_address_with_geo_loc
38
38
  VCR.use_cassette('yahoo_full') do
39
- url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@full_address)}"
39
+ url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@full_address)}"
40
40
  do_full_address_assertions(Geokit::Geocoders::YahooGeocoder.geocode(@yahoo_full_loc))
41
41
  assert_yahoo_url url
42
42
  end
@@ -44,7 +44,7 @@ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
44
44
 
45
45
  def test_yahoo_city
46
46
  VCR.use_cassette('yahoo_city') do
47
- url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@address)}"
47
+ url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@address)}"
48
48
  do_city_assertions(Geokit::Geocoders::YahooGeocoder.geocode(@address))
49
49
  assert_yahoo_url url
50
50
  end
@@ -52,7 +52,7 @@ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
52
52
 
53
53
  def test_yahoo_city_accuracy
54
54
  VCR.use_cassette('yahoo_city') do
55
- url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@address)}"
55
+ url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@address)}"
56
56
  res = Geokit::Geocoders::YahooGeocoder.geocode(@address)
57
57
  assert_yahoo_url url
58
58
  assert_equal 4, res.accuracy
@@ -61,22 +61,22 @@ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
61
61
 
62
62
  def test_yahoo_city_with_geo_loc
63
63
  VCR.use_cassette('yahoo_city') do
64
- url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@address)}"
64
+ url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(@address)}"
65
65
  do_city_assertions(Geokit::Geocoders::YahooGeocoder.geocode(@yahoo_city_loc))
66
66
  assert_yahoo_url url
67
67
  end
68
68
  end
69
69
 
70
70
  def test_no_results
71
- no_results_address = "ZZ, ZZ, ZZ"
72
- no_results_full_hash = {:street_address=>"ZZ", :city=>"ZZ", :state=>"ZZ"}
71
+ no_results_address = 'ZZ, ZZ, ZZ'
72
+ no_results_full_hash = {street_address: 'ZZ', city: 'ZZ', state: 'ZZ'}
73
73
  no_results_full_loc = Geokit::GeoLoc.new(no_results_full_hash)
74
74
 
75
75
  VCR.use_cassette('yahoo_no_results') do
76
- url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(no_results_address)}"
76
+ url = "https://yboss.yahooapis.com/geo/placefinder?flags=J&q=#{Geokit::Inflector.url_escape(no_results_address)}"
77
77
  result = Geokit::Geocoders::YahooGeocoder.geocode(no_results_address)
78
78
  assert_yahoo_url url
79
- assert_equal ",", result.ll
79
+ assert_equal ',', result.ll
80
80
  end
81
81
  end
82
82
 
@@ -90,22 +90,21 @@ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
90
90
 
91
91
  # next two methods do the assertions for both address-level and city-level lookups
92
92
  def do_full_address_assertions(res)
93
-
94
- assert_equal "CA", res.state
95
- assert_equal "San Francisco", res.city
93
+ assert_equal 'CA', res.state
94
+ assert_equal 'San Francisco', res.city
96
95
  assert_array_in_delta [37.792332, -122.393791], res.to_a
97
96
  assert res.is_us?
98
- assert_equal "100 Spear St, San Francisco, CA, 94105-1578, US", res.full_address
99
- assert_equal "yahoo", res.provider
97
+ assert_equal '100 Spear St, San Francisco, CA, 94105-1578, US', res.full_address
98
+ assert_equal 'yahoo', res.provider
100
99
  end
101
100
 
102
101
  def do_city_assertions(res)
103
- assert_equal "CA", res.state
104
- assert_equal "San Francisco", res.city
102
+ assert_equal 'CA', res.state
103
+ assert_equal 'San Francisco', res.city
105
104
  assert_array_in_delta [37.77713, -122.41964], res.to_a
106
105
  assert res.is_us?
107
- assert_equal "San Francisco, CA, US", res.full_address
106
+ assert_equal 'San Francisco, CA, US', res.full_address
108
107
  assert_nil res.street_address
109
- assert_equal "yahoo", res.provider
108
+ assert_equal 'yahoo', res.provider
110
109
  end
111
110
  end
@@ -2,90 +2,89 @@
2
2
  require File.join(File.dirname(__FILE__), 'helper')
3
3
 
4
4
  class YandexGeocoderTest < BaseGeocoderTest #:nodoc: all
5
- YANDEX_FULL=<<-EOF.strip
6
- {"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"Москва, улица Новый Арбат, дом 24","found":"1","results":"10"}},"featureMember":[{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"house","text":"Россия, Москва, улица Новый Арбат, 24","precision":"exact","AddressDetails":{"Country":{"AddressLine":"Москва, улица Новый Арбат, 24","CountryNameCode":"RU","CountryName":"Россия","Locality":{"LocalityName":"Москва","Thoroughfare":{"ThoroughfareName":"улица Новый Арбат","Premise":{"PremiseNumber":"24"}}}}}}},"description":"Москва, Россия","name":"улица Новый Арбат, 24","boundedBy":{"Envelope":{"lowerCorner":"37.585565 55.751928","upperCorner":"37.589662 55.754238"}},"Point":{"pos":"37.587614 55.753083"}}}]}}}
7
- EOF
5
+ YANDEX_FULL = <<-EOF.strip
6
+ {"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"Москва, улица Новый Арбат, дом 24","found":"1","results":"10"}},"featureMember":[{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"house","text":"Россия, Москва, улица Новый Арбат, 24","precision":"exact","AddressDetails":{"Country":{"AddressLine":"Москва, улица Новый Арбат, 24","CountryNameCode":"RU","CountryName":"Россия","Locality":{"LocalityName":"Москва","Thoroughfare":{"ThoroughfareName":"улица Новый Арбат","Premise":{"PremiseNumber":"24"}}}}}}},"description":"Москва, Россия","name":"улица Новый Арбат, 24","boundedBy":{"Envelope":{"lowerCorner":"37.585565 55.751928","upperCorner":"37.589662 55.754238"}},"Point":{"pos":"37.587614 55.753083"}}}]}}}
7
+ EOF
8
8
 
9
- YANDEX_REGION=<<-EOF.strip
10
- {"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"Ростов-на-Дону, ул. Станиславского, д.21","found":"1","results":"10"}},"featureMember":[{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"house","text":"Россия, Ростовская область, город Ростов-на-Дону, улица Станиславского, 21","precision":"exact","AddressDetails":{"Country":{"AddressLine":"Ростовская область, город Ростов-на-Дону, улица Станиславского, 21","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Ростовская область","Locality":{"LocalityName":"город Ростов-на-Дону","Thoroughfare":{"ThoroughfareName":"улица Станиславского","Premise":{"PremiseNumber":"21"}}}}}}}},"description":"город Ростов-на-Дону, Ростовская область, Россия","name":"улица Станиславского, 21","boundedBy":{"Envelope":{"lowerCorner":"39.701349 47.214507","upperCorner":"39.705446 47.217298"}},"Point":{"pos":"39.703398 47.215903"}}}]}}}
11
- EOF
9
+ YANDEX_REGION = <<-EOF.strip
10
+ {"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"Ростов-на-Дону, ул. Станиславского, д.21","found":"1","results":"10"}},"featureMember":[{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"house","text":"Россия, Ростовская область, город Ростов-на-Дону, улица Станиславского, 21","precision":"exact","AddressDetails":{"Country":{"AddressLine":"Ростовская область, город Ростов-на-Дону, улица Станиславского, 21","CountryNameCode":"RU","CountryName":"Россия","AdministrativeArea":{"AdministrativeAreaName":"Ростовская область","Locality":{"LocalityName":"город Ростов-на-Дону","Thoroughfare":{"ThoroughfareName":"улица Станиславского","Premise":{"PremiseNumber":"21"}}}}}}}},"description":"город Ростов-на-Дону, Ростовская область, Россия","name":"улица Станиславского, 21","boundedBy":{"Envelope":{"lowerCorner":"39.701349 47.214507","upperCorner":"39.705446 47.217298"}},"Point":{"pos":"39.703398 47.215903"}}}]}}}
11
+ EOF
12
12
 
13
- YANDEX_CITY=<<-EOF.strip
14
- {"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"город Москва","found":"1","results":"10"}},"featureMember":[{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"locality","text":"Россия, Москва","precision":"other","AddressDetails":{"Country":{"AddressLine":"Москва","CountryNameCode":"RU","CountryName":"Россия","Locality":{"LocalityName":"Москва"}}}}},"description":"Россия","name":"Москва","boundedBy":{"Envelope":{"lowerCorner":"37.182743 55.490667","upperCorner":"37.964969 56.01074"}},"Point":{"pos":"37.617761 55.755773"}}}]}}}
15
- EOF
13
+ YANDEX_CITY = <<-EOF.strip
14
+ {"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"город Москва","found":"1","results":"10"}},"featureMember":[{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"locality","text":"Россия, Москва","precision":"other","AddressDetails":{"Country":{"AddressLine":"Москва","CountryNameCode":"RU","CountryName":"Россия","Locality":{"LocalityName":"Москва"}}}}},"description":"Россия","name":"Москва","boundedBy":{"Envelope":{"lowerCorner":"37.182743 55.490667","upperCorner":"37.964969 56.01074"}},"Point":{"pos":"37.617761 55.755773"}}}]}}}
15
+ EOF
16
16
 
17
- YANDEX_NO_RESULTS=<<-EOF.strip
18
- {"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"ZZ, ZZ, ZZ","found":"0","results":"10"}},"featureMember":[]}}}
19
- EOF
17
+ YANDEX_NO_RESULTS = <<-EOF.strip
18
+ {"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"ZZ, ZZ, ZZ","found":"0","results":"10"}},"featureMember":[]}}}
19
+ EOF
20
20
 
21
21
  def setup
22
22
  super
23
- @full_address = "Москва, улица Новый Арбат, дом 24"
24
- @address = "город Москва"
23
+ @full_address = 'Москва, улица Новый Арбат, дом 24'
24
+ @address = 'город Москва'
25
25
  end
26
26
 
27
27
  # the testing methods themselves
28
28
  def test_yandex_full_address
29
29
  response = MockSuccess.new
30
30
  response.expects(:body).returns(YANDEX_FULL)
31
- url = "http://geocode-maps.yandex.ru/1.x/?geocode=#{Geokit::Inflector::url_escape(@full_address)}&format=json"
31
+ url = "http://geocode-maps.yandex.ru/1.x/?geocode=#{Geokit::Inflector.url_escape(@full_address)}&format=json"
32
32
  Geokit::Geocoders::YandexGeocoder.expects(:call_geocoder_service).with(url).returns(response)
33
33
  res = Geokit::Geocoders::YandexGeocoder.geocode(@full_address)
34
34
 
35
- assert_equal "yandex", res.provider
36
- assert_equal "улица Новый Арбат, 24", res.street_address
37
- assert_equal "Москва", res.city
35
+ assert_equal 'yandex', res.provider
36
+ assert_equal 'улица Новый Арбат, 24', res.street_address
37
+ assert_equal 'Москва', res.city
38
38
  assert_equal 55.753083, res.lat
39
39
  assert_equal 37.587614, res.lng
40
- assert_equal "RU", res.country_code
40
+ assert_equal 'RU', res.country_code
41
41
  assert res.success
42
42
  end
43
43
 
44
44
  def test_yandex_full_address_with_region
45
- region_address = "Ростов-на-Дону, ул. Станиславского, д.21"
45
+ region_address = 'Ростов-на-Дону, ул. Станиславского, д.21'
46
46
  response = MockSuccess.new
47
47
  response.expects(:body).returns(YANDEX_REGION)
48
- url = "http://geocode-maps.yandex.ru/1.x/?geocode=#{Geokit::Inflector::url_escape(region_address)}&format=json"
48
+ url = "http://geocode-maps.yandex.ru/1.x/?geocode=#{Geokit::Inflector.url_escape(region_address)}&format=json"
49
49
  Geokit::Geocoders::YandexGeocoder.expects(:call_geocoder_service).with(url).returns(response)
50
50
  res = Geokit::Geocoders::YandexGeocoder.geocode(region_address)
51
51
 
52
- assert_equal "yandex", res.provider
53
- assert_equal "улица Станиславского, 21", res.street_address
54
- assert_equal "город Ростов на Дону", res.city
55
- assert_equal "Ростовская область", res.state
52
+ assert_equal 'yandex', res.provider
53
+ assert_equal 'улица Станиславского, 21', res.street_address
54
+ assert_equal 'город Ростов на Дону', res.city
55
+ assert_equal 'Ростовская область', res.state
56
56
  assert_equal 47.215903, res.lat
57
57
  assert_equal 39.703398, res.lng
58
- assert_equal "RU", res.country_code
58
+ assert_equal 'RU', res.country_code
59
59
  assert res.success
60
60
  end
61
61
 
62
62
  def test_yandex_city
63
63
  response = MockSuccess.new
64
64
  response.expects(:body).returns(YANDEX_CITY)
65
- url = "http://geocode-maps.yandex.ru/1.x/?geocode=#{Geokit::Inflector::url_escape(@address)}&format=json"
65
+ url = "http://geocode-maps.yandex.ru/1.x/?geocode=#{Geokit::Inflector.url_escape(@address)}&format=json"
66
66
  Geokit::Geocoders::YandexGeocoder.expects(:call_geocoder_service).with(url).returns(response)
67
67
  res = Geokit::Geocoders::YandexGeocoder.geocode(@address)
68
68
 
69
- assert_equal "yandex", res.provider
70
- assert_equal "city", res.precision
71
- assert_equal "Москва", res.city
69
+ assert_equal 'yandex', res.provider
70
+ assert_equal 'city', res.precision
71
+ assert_equal 'Москва', res.city
72
72
  assert_equal 55.755773, res.lat
73
73
  assert_equal 37.617761, res.lng
74
- assert_equal "RU", res.country_code
74
+ assert_equal 'RU', res.country_code
75
75
  assert res.success
76
76
  end
77
77
 
78
-
79
78
  def test_no_results
80
- no_results_address = "ZZ, ZZ, ZZ"
79
+ no_results_address = 'ZZ, ZZ, ZZ'
81
80
  # no_results_full_hash = {:street_address=>"ZZ", :city=>"ZZ", :state=>"ZZ"}
82
81
  # no_results_full_loc = Geokit::GeoLoc.new(no_results_full_hash)
83
82
 
84
83
  response = MockSuccess.new
85
84
  response.expects(:body).returns(YANDEX_NO_RESULTS)
86
- url = "http://geocode-maps.yandex.ru/1.x/?geocode=#{Geokit::Inflector::url_escape(no_results_address)}&format=json"
85
+ url = "http://geocode-maps.yandex.ru/1.x/?geocode=#{Geokit::Inflector.url_escape(no_results_address)}&format=json"
87
86
  Geokit::Geocoders::YandexGeocoder.expects(:call_geocoder_service).with(url).returns(response)
88
87
  result = Geokit::Geocoders::YandexGeocoder.geocode(no_results_address)
89
- assert_equal ",", result.ll
88
+ assert_equal ',', result.ll
90
89
  end
91
90
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geokit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.5
5
- prerelease:
4
+ version: 1.9.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michael Noack
@@ -12,166 +11,174 @@ authors:
12
11
  autorequire:
13
12
  bindir: bin
14
13
  cert_chain: []
15
- date: 2014-06-03 00:00:00.000000000 Z
14
+ date: 2014-10-01 00:00:00.000000000 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: multi_json
19
18
  requirement: !ruby/object:Gem::Requirement
20
- none: false
21
19
  requirements:
22
- - - ! '>='
20
+ - - ">="
23
21
  - !ruby/object:Gem::Version
24
22
  version: 1.3.2
25
23
  type: :runtime
26
24
  prerelease: false
27
25
  version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
26
  requirements:
30
- - - ! '>='
27
+ - - ">="
31
28
  - !ruby/object:Gem::Version
32
29
  version: 1.3.2
33
30
  - !ruby/object:Gem::Dependency
34
31
  name: bundler
35
32
  requirement: !ruby/object:Gem::Requirement
36
- none: false
37
33
  requirements:
38
- - - ! '>'
34
+ - - ">"
39
35
  - !ruby/object:Gem::Version
40
36
  version: '1.0'
41
37
  type: :development
42
38
  prerelease: false
43
39
  version_requirements: !ruby/object:Gem::Requirement
44
- none: false
45
40
  requirements:
46
- - - ! '>'
41
+ - - ">"
47
42
  - !ruby/object:Gem::Version
48
43
  version: '1.0'
49
44
  - !ruby/object:Gem::Dependency
50
45
  name: simplecov
51
46
  requirement: !ruby/object:Gem::Requirement
52
- none: false
53
47
  requirements:
54
- - - ! '>='
48
+ - - ">="
55
49
  - !ruby/object:Gem::Version
56
50
  version: '0'
57
51
  type: :development
58
52
  prerelease: false
59
53
  version_requirements: !ruby/object:Gem::Requirement
60
- none: false
61
54
  requirements:
62
- - - ! '>='
55
+ - - ">="
63
56
  - !ruby/object:Gem::Version
64
57
  version: '0'
65
58
  - !ruby/object:Gem::Dependency
66
59
  name: simplecov-rcov
67
60
  requirement: !ruby/object:Gem::Requirement
68
- none: false
69
61
  requirements:
70
- - - ! '>='
62
+ - - ">="
71
63
  - !ruby/object:Gem::Version
72
64
  version: '0'
73
65
  type: :development
74
66
  prerelease: false
75
67
  version_requirements: !ruby/object:Gem::Requirement
76
- none: false
77
68
  requirements:
78
- - - ! '>='
69
+ - - ">="
79
70
  - !ruby/object:Gem::Version
80
71
  version: '0'
81
72
  - !ruby/object:Gem::Dependency
82
73
  name: rake
83
74
  requirement: !ruby/object:Gem::Requirement
84
- none: false
85
75
  requirements:
86
- - - ! '>='
76
+ - - ">="
87
77
  - !ruby/object:Gem::Version
88
78
  version: '0'
89
79
  type: :development
90
80
  prerelease: false
91
81
  version_requirements: !ruby/object:Gem::Requirement
92
- none: false
93
82
  requirements:
94
- - - ! '>='
83
+ - - ">="
95
84
  - !ruby/object:Gem::Version
96
85
  version: '0'
97
86
  - !ruby/object:Gem::Dependency
98
87
  name: mocha
99
88
  requirement: !ruby/object:Gem::Requirement
100
- none: false
101
89
  requirements:
102
- - - ! '>='
90
+ - - ">="
103
91
  - !ruby/object:Gem::Version
104
92
  version: '0'
105
93
  type: :development
106
94
  prerelease: false
107
95
  version_requirements: !ruby/object:Gem::Requirement
108
- none: false
109
96
  requirements:
110
- - - ! '>='
97
+ - - ">="
111
98
  - !ruby/object:Gem::Version
112
99
  version: '0'
113
100
  - !ruby/object:Gem::Dependency
114
101
  name: coveralls
115
102
  requirement: !ruby/object:Gem::Requirement
116
- none: false
117
103
  requirements:
118
- - - ! '>='
104
+ - - ">="
119
105
  - !ruby/object:Gem::Version
120
106
  version: '0'
121
107
  type: :development
122
108
  prerelease: false
123
109
  version_requirements: !ruby/object:Gem::Requirement
124
- none: false
125
110
  requirements:
126
- - - ! '>='
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: rubocop
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ - !ruby/object:Gem::Dependency
129
+ name: pre-commit
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
127
140
  - !ruby/object:Gem::Version
128
141
  version: '0'
129
142
  - !ruby/object:Gem::Dependency
130
143
  name: vcr
131
144
  requirement: !ruby/object:Gem::Requirement
132
- none: false
133
145
  requirements:
134
- - - ! '>='
146
+ - - ">="
135
147
  - !ruby/object:Gem::Version
136
148
  version: '0'
137
149
  type: :development
138
150
  prerelease: false
139
151
  version_requirements: !ruby/object:Gem::Requirement
140
- none: false
141
152
  requirements:
142
- - - ! '>='
153
+ - - ">="
143
154
  - !ruby/object:Gem::Version
144
155
  version: '0'
145
156
  - !ruby/object:Gem::Dependency
146
157
  name: webmock
147
158
  requirement: !ruby/object:Gem::Requirement
148
- none: false
149
159
  requirements:
150
- - - ! '>='
160
+ - - ">="
151
161
  - !ruby/object:Gem::Version
152
162
  version: '0'
153
163
  type: :development
154
164
  prerelease: false
155
165
  version_requirements: !ruby/object:Gem::Requirement
156
- none: false
157
166
  requirements:
158
- - - ! '>='
167
+ - - ">="
159
168
  - !ruby/object:Gem::Version
160
169
  version: '0'
161
170
  - !ruby/object:Gem::Dependency
162
171
  name: typhoeus
163
172
  requirement: !ruby/object:Gem::Requirement
164
- none: false
165
173
  requirements:
166
- - - ! '>='
174
+ - - ">="
167
175
  - !ruby/object:Gem::Version
168
176
  version: '0'
169
177
  type: :development
170
178
  prerelease: false
171
179
  version_requirements: !ruby/object:Gem::Requirement
172
- none: false
173
180
  requirements:
174
- - - ! '>='
181
+ - - ">="
175
182
  - !ruby/object:Gem::Version
176
183
  version: '0'
177
184
  description: Geokit provides geocoding and distance calculation in an easy-to-use
@@ -183,8 +190,8 @@ extensions: []
183
190
  extra_rdoc_files:
184
191
  - README.markdown
185
192
  files:
186
- - .gitignore
187
- - .travis.yml
193
+ - ".gitignore"
194
+ - ".travis.yml"
188
195
  - CHANGELOG.md
189
196
  - Gemfile
190
197
  - MIT-LICENSE
@@ -199,16 +206,27 @@ files:
199
206
  - fixtures/vcr_cassettes/geo_plugin_geocode.yml
200
207
  - fixtures/vcr_cassettes/geocodio_geocode.yml
201
208
  - fixtures/vcr_cassettes/geonames_geocode.yml
209
+ - fixtures/vcr_cassettes/geonames_geocode_premium.yml
202
210
  - fixtures/vcr_cassettes/google_city.yml
203
- - fixtures/vcr_cassettes/google_country_code_biased_result.yml
211
+ - fixtures/vcr_cassettes/google_country_code_biased_result_orly.yml
212
+ - fixtures/vcr_cassettes/google_country_code_biased_result_toledo.yml
204
213
  - fixtures/vcr_cassettes/google_full.yml
205
214
  - fixtures/vcr_cassettes/google_full_short.yml
206
215
  - fixtures/vcr_cassettes/google_language_response_fr.yml
207
216
  - fixtures/vcr_cassettes/google_multi.yml
217
+ - fixtures/vcr_cassettes/google_result_toledo_default_bias.yml
208
218
  - fixtures/vcr_cassettes/google_reverse_madrid.yml
209
219
  - fixtures/vcr_cassettes/google_reverse_madrid_es.yml
220
+ - fixtures/vcr_cassettes/google_sublocality.yml
210
221
  - fixtures/vcr_cassettes/map_quest_full.yml
211
222
  - fixtures/vcr_cassettes/map_quest_reverse_madrid.yml
223
+ - fixtures/vcr_cassettes/mapbox_forward_geocode.yml
224
+ - fixtures/vcr_cassettes/mapbox_reverse_geocode.yml
225
+ - fixtures/vcr_cassettes/opencage_city.yml
226
+ - fixtures/vcr_cassettes/opencage_full.yml
227
+ - fixtures/vcr_cassettes/opencage_language_response_es.yml
228
+ - fixtures/vcr_cassettes/opencage_reverse_madrid.yml
229
+ - fixtures/vcr_cassettes/opencage_reverse_prilep.yml
212
230
  - fixtures/vcr_cassettes/ripe_geocode.yml
213
231
  - fixtures/vcr_cassettes/ripe_geocode_45.yml
214
232
  - fixtures/vcr_cassettes/ripe_geocode_au.yml
@@ -231,8 +249,10 @@ files:
231
249
  - lib/geokit/geocoders/geonames.rb
232
250
  - lib/geokit/geocoders/google.rb
233
251
  - lib/geokit/geocoders/ip.rb
252
+ - lib/geokit/geocoders/mapbox.rb
234
253
  - lib/geokit/geocoders/mapquest.rb
235
254
  - lib/geokit/geocoders/maxmind.rb
255
+ - lib/geokit/geocoders/opencage.rb
236
256
  - lib/geokit/geocoders/openstreetmap.rb
237
257
  - lib/geokit/geocoders/ripe.rb
238
258
  - lib/geokit/geocoders/us_geocoder.rb
@@ -262,13 +282,15 @@ files:
262
282
  - test/test_ipgeocoder.rb
263
283
  - test/test_latlng.rb
264
284
  - test/test_map_quest.rb
285
+ - test/test_mapbox_geocoder.rb
265
286
  - test/test_mappable.rb
266
287
  - test/test_maxmind_geocoder.rb
267
288
  - test/test_multi_geocoder.rb
268
289
  - test/test_multi_ip_geocoder.rb
269
290
  - test/test_net_adapter.rb
291
+ - test/test_opencage_geocoder.rb
270
292
  - test/test_openstreetmap_geocoder.rb
271
- - test/test_polygon_contains.rb
293
+ - test/test_polygon.rb
272
294
  - test/test_ripe_geocoder.rb
273
295
  - test/test_us_geocoder.rb
274
296
  - test/test_yahoo_geocoder.rb
@@ -276,30 +298,29 @@ files:
276
298
  homepage: http://github.com/geokit/geokit
277
299
  licenses:
278
300
  - MIT
301
+ metadata: {}
279
302
  post_install_message:
280
303
  rdoc_options:
281
- - --main
304
+ - "--main"
282
305
  - README.markdown
283
306
  require_paths:
284
307
  - lib
285
308
  required_ruby_version: !ruby/object:Gem::Requirement
286
- none: false
287
309
  requirements:
288
- - - ! '>='
310
+ - - ">="
289
311
  - !ruby/object:Gem::Version
290
312
  version: '0'
291
313
  required_rubygems_version: !ruby/object:Gem::Requirement
292
- none: false
293
314
  requirements:
294
- - - ! '>='
315
+ - - ">="
295
316
  - !ruby/object:Gem::Version
296
317
  version: '0'
297
318
  requirements: []
298
319
  rubyforge_project:
299
- rubygems_version: 1.8.25
320
+ rubygems_version: 2.2.2
300
321
  signing_key:
301
- specification_version: 3
302
- summary: ! 'Geokit: encoding and distance calculation gem'
322
+ specification_version: 4
323
+ summary: 'Geokit: encoding and distance calculation gem'
303
324
  test_files:
304
325
  - test/helper.rb
305
326
  - test/test_base_geocoder.rb
@@ -317,13 +338,15 @@ test_files:
317
338
  - test/test_ipgeocoder.rb
318
339
  - test/test_latlng.rb
319
340
  - test/test_map_quest.rb
341
+ - test/test_mapbox_geocoder.rb
320
342
  - test/test_mappable.rb
321
343
  - test/test_maxmind_geocoder.rb
322
344
  - test/test_multi_geocoder.rb
323
345
  - test/test_multi_ip_geocoder.rb
324
346
  - test/test_net_adapter.rb
347
+ - test/test_opencage_geocoder.rb
325
348
  - test/test_openstreetmap_geocoder.rb
326
- - test/test_polygon_contains.rb
349
+ - test/test_polygon.rb
327
350
  - test/test_ripe_geocoder.rb
328
351
  - test/test_us_geocoder.rb
329
352
  - test/test_yahoo_geocoder.rb