From 9446d23f42cd5102fe7dd6c5a6c3e641d2624947 Mon Sep 17 00:00:00 2001 From: Michael Noack Date: Tue, 31 Dec 2013 11:22:28 +1030 Subject: [PATCH] Fix MultiGeocoder with geocoders that only have one argument (e.g. Bing) --- CHANGELOG.md | 4 ++++ lib/geokit/multi_geocoder.rb | 4 ++-- lib/geokit/version.rb | 2 +- test/test_multi_geocoder.rb | 28 ++++++++++++++-------------- test/test_multi_ip_geocoder.rb | 10 +++++----- 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19c59e86..a2838117 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.8.3 + +* Fix MultiGeocoder with geocoders that only have one argument + ## 1.8.2 * Fix due to name clash with dependency definitions in geokit 1.8.1 diff --git a/lib/geokit/multi_geocoder.rb b/lib/geokit/multi_geocoder.rb index aad8382d..1f03a733 100644 --- a/lib/geokit/multi_geocoder.rb +++ b/lib/geokit/multi_geocoder.rb @@ -22,14 +22,14 @@ class MultiGeocoder < Geocoder # # The failover approach is crucial for production-grade apps, but is rarely used. # 98% of your geocoding calls will be successful with the first call - def self.do_geocode(address, options = {}) + def self.do_geocode(address, *args) geocode_ip = /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.match(address) provider_order = geocode_ip ? Geokit::Geocoders::ip_provider_order : Geokit::Geocoders::provider_order provider_order.each do |provider| klass = geocoder(provider) begin - res = klass.send :geocode, address, options + res = klass.send :geocode, address, *args return res if res.success? rescue => e logger.error("An error has occurred during geocoding: #{e}\nAddress: #{address}. Provider: #{provider}") diff --git a/lib/geokit/version.rb b/lib/geokit/version.rb index 815c02fc..00ee5fcf 100644 --- a/lib/geokit/version.rb +++ b/lib/geokit/version.rb @@ -1,3 +1,3 @@ module Geokit - VERSION = '1.8.2' + VERSION = '1.8.3' end diff --git a/test/test_multi_geocoder.rb b/test/test_multi_geocoder.rb index 5cfcd216..22431b51 100644 --- a/test/test_multi_geocoder.rb +++ b/test/test_multi_geocoder.rb @@ -1,6 +1,6 @@ require File.join(File.dirname(__FILE__), 'helper') -Geokit::Geocoders::provider_order=[:google,:yahoo,:us] +Geokit::Geocoders::provider_order=[:google, :bing, :us] class MultiGeocoderTest < BaseGeocoderTest #:nodoc: all @@ -10,27 +10,27 @@ def setup end def test_successful_first - Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address, {}).returns(@success) + Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@success) assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@address) end def test_failover - Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address, {}).returns(@failure) - Geokit::Geocoders::YahooGeocoder.expects(:geocode).with(@address, {}).returns(@success) + Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@failure) + Geokit::Geocoders::BingGeocoder.expects(:geocode).with(@address).returns(@success) assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@address) end def test_double_failover - Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address, {}).returns(@failure) - Geokit::Geocoders::YahooGeocoder.expects(:geocode).with(@address, {}).returns(@failure) - Geokit::Geocoders::UsGeocoder.expects(:geocode).with(@address, {}).returns(@success) + Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@failure) + Geokit::Geocoders::BingGeocoder.expects(:geocode).with(@address).returns(@failure) + Geokit::Geocoders::UsGeocoder.expects(:geocode).with(@address).returns(@success) assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@address) end def test_failure - Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address, {}).returns(@failure) - Geokit::Geocoders::YahooGeocoder.expects(:geocode).with(@address, {}).returns(@failure) - Geokit::Geocoders::UsGeocoder.expects(:geocode).with(@address, {}).returns(@failure) + Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with(@address).returns(@failure) + Geokit::Geocoders::BingGeocoder.expects(:geocode).with(@address).returns(@failure) + Geokit::Geocoders::UsGeocoder.expects(:geocode).with(@address).returns(@failure) assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@address) end @@ -45,7 +45,7 @@ def test_blank_address t1, t2 = Geokit::Geocoders.provider_order, Geokit::Geocoders.ip_provider_order # will need to reset after Geokit::Geocoders.provider_order = [:google] Geokit::Geocoders.ip_provider_order = [:geo_plugin] - Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with("", {}).returns(@failure) + Geokit::Geocoders::GoogleGeocoder.expects(:geocode).with("").returns(@failure) Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).never assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode("") Geokit::Geocoders.provider_order, Geokit::Geocoders.ip_provider_order = t1, t2 # reset to orig values @@ -58,20 +58,20 @@ def test_reverse_geocode_successful_first def test_reverse_geocode_failover Geokit::Geocoders::GoogleGeocoder.expects(:reverse_geocode).with(@latlng).returns(@failure) - Geokit::Geocoders::YahooGeocoder.expects(:reverse_geocode).with(@latlng).returns(@success) + Geokit::Geocoders::BingGeocoder.expects(:reverse_geocode).with(@latlng).returns(@success) assert_equal @success, Geokit::Geocoders::MultiGeocoder.reverse_geocode(@latlng) end def test_reverse_geocode_double_failover Geokit::Geocoders::GoogleGeocoder.expects(:reverse_geocode).with(@latlng).returns(@failure) - Geokit::Geocoders::YahooGeocoder.expects(:reverse_geocode).with(@latlng).returns(@failure) + Geokit::Geocoders::BingGeocoder.expects(:reverse_geocode).with(@latlng).returns(@failure) Geokit::Geocoders::UsGeocoder.expects(:reverse_geocode).with(@latlng).returns(@success) assert_equal @success, Geokit::Geocoders::MultiGeocoder.reverse_geocode(@latlng) end def test_reverse_geocode_failure Geokit::Geocoders::GoogleGeocoder.expects(:reverse_geocode).with(@latlng).returns(@failure) - Geokit::Geocoders::YahooGeocoder.expects(:reverse_geocode).with(@latlng).returns(@failure) + Geokit::Geocoders::BingGeocoder.expects(:reverse_geocode).with(@latlng).returns(@failure) Geokit::Geocoders::UsGeocoder.expects(:reverse_geocode).with(@latlng).returns(@failure) assert_equal @failure, Geokit::Geocoders::MultiGeocoder.reverse_geocode(@latlng) end diff --git a/test/test_multi_ip_geocoder.rb b/test/test_multi_ip_geocoder.rb index 367cd030..a990aafd 100644 --- a/test/test_multi_ip_geocoder.rb +++ b/test/test_multi_ip_geocoder.rb @@ -12,19 +12,19 @@ def setup end def test_successful_first - Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).with(@ip_address, {}).returns(@success) + Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).with(@ip_address).returns(@success) assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@ip_address) end def test_failover - Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).with(@ip_address, {}).returns(@failure) - Geokit::Geocoders::IpGeocoder.expects(:geocode).with(@ip_address, {}).returns(@success) + Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).with(@ip_address).returns(@failure) + Geokit::Geocoders::IpGeocoder.expects(:geocode).with(@ip_address).returns(@success) assert_equal @success, Geokit::Geocoders::MultiGeocoder.geocode(@ip_address) end def test_failure - Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).with(@ip_address, {}).returns(@failure) - Geokit::Geocoders::IpGeocoder.expects(:geocode).with(@ip_address, {}).returns(@failure) + Geokit::Geocoders::GeoPluginGeocoder.expects(:geocode).with(@ip_address).returns(@failure) + Geokit::Geocoders::IpGeocoder.expects(:geocode).with(@ip_address).returns(@failure) assert_equal @failure, Geokit::Geocoders::MultiGeocoder.geocode(@ip_address) end