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
@@ -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