diff --git a/lib/geocoder/lookups/bing.rb b/lib/geocoder/lookups/bing.rb index 441845086d3541dbeb060c4a745fb97fd8a187c2..b99c8d6ce6e5a8d2df95b3f24f24bc6887827a04 100644 --- a/lib/geocoder/lookups/bing.rb +++ b/lib/geocoder/lookups/bing.rb @@ -38,10 +38,10 @@ module Geocoder::Lookup end def query_url_params(query) - super.merge( + { :key => configuration.api_key, :query => query.reverse_geocode? ? nil : query.sanitized_text - ) + }.merge(super) end end end diff --git a/lib/geocoder/lookups/geocoder_ca.rb b/lib/geocoder/lookups/geocoder_ca.rb index 81e1f8506c641c512526f310624992cb46d5ab82..7ec7c1e97d32b59ac3bb58c005c3dabc70f23096 100644 --- a/lib/geocoder/lookups/geocoder_ca.rb +++ b/lib/geocoder/lookups/geocoder_ca.rb @@ -27,12 +27,12 @@ module Geocoder::Lookup end def query_url_params(query) - params = super.merge( + params = { :geoit => "xml", :jsonp => 1, :callback => "test", :auth => configuration.api_key - ) + }.merge(super) if query.reverse_geocode? lat,lon = query.coordinates params[:latt] = lat diff --git a/lib/geocoder/lookups/google.rb b/lib/geocoder/lookups/google.rb index 96387c45a7e0a469758c5a41e96188e0a203a5e3..c16bf85f8d23e913acdc10f7cb17a4cdc7e5172e 100644 --- a/lib/geocoder/lookups/google.rb +++ b/lib/geocoder/lookups/google.rb @@ -54,9 +54,9 @@ module Geocoder::Lookup end def query_url_params(query) - super.merge(query_url_google_params(query)).merge( + query_url_google_params(query).merge( :key => configuration.api_key - ) + ).merge(super) end end end diff --git a/lib/geocoder/lookups/google_premier.rb b/lib/geocoder/lookups/google_premier.rb index d555c6325d2b19adb8da544fe928698727486480..d59adf9d1497007efef8edc2bd8a68ce7899e213 100644 --- a/lib/geocoder/lookups/google_premier.rb +++ b/lib/geocoder/lookups/google_premier.rb @@ -22,7 +22,7 @@ module Geocoder::Lookup private # --------------------------------------------------------------- def query_url_params(query) - super.merge(query_url_google_params(query)).merge( + query_url_google_params(query).merge(super).merge( :key => nil, # don't use param inherited from Google lookup :client => configuration.api_key[1], :channel => configuration.api_key[2] diff --git a/lib/geocoder/lookups/mapquest.rb b/lib/geocoder/lookups/mapquest.rb index a0e31f39a2204c62e34b14fd423542613ea26a10..8c325e49ecc5b3c52f1ae94bc409074bb9282ddb 100644 --- a/lib/geocoder/lookups/mapquest.rb +++ b/lib/geocoder/lookups/mapquest.rb @@ -27,12 +27,11 @@ module Geocoder::Lookup end def query_url_params(query) - key = configuration.api_key params = { :location => query.sanitized_text } - if key + if key = configuration.api_key params[:key] = CGI.unescape(key) end - super.merge(params) + params.merge(super) end def results(query) diff --git a/lib/geocoder/lookups/maxmind.rb b/lib/geocoder/lookups/maxmind.rb index ba41e40ed4c24fabc58f1f3eef1f4aefb00f6321..e02750336b21c41f6ad223522fe019d1729ef2f6 100644 --- a/lib/geocoder/lookups/maxmind.rb +++ b/lib/geocoder/lookups/maxmind.rb @@ -39,10 +39,10 @@ module Geocoder::Lookup end def query_url_params(query) - super.merge( + { :l => configuration.api_key, :i => query.sanitized_text - ) + }.merge(super) end end end diff --git a/lib/geocoder/lookups/nominatim.rb b/lib/geocoder/lookups/nominatim.rb index aea86e4b7c36c81815e9fa66656e5e0b6ffbb16a..e8d36d00c17b6db7e51a1477b7dbf0358feb0b48 100644 --- a/lib/geocoder/lookups/nominatim.rb +++ b/lib/geocoder/lookups/nominatim.rb @@ -26,12 +26,12 @@ module Geocoder::Lookup end def query_url_params(query) - params = super.merge( + params = { :format => "json", :polygon => "1", :addressdetails => "1", :"accept-language" => configuration.language - ) + }.merge(super) if query.reverse_geocode? lat,lon = query.coordinates params[:lat] = lat diff --git a/lib/geocoder/lookups/yahoo.rb b/lib/geocoder/lookups/yahoo.rb index a271b776bf4afad90c30ce42ba3dd65531588896..0c27cc0c77cde05e30c85c5a1adfae9852caa9ed 100644 --- a/lib/geocoder/lookups/yahoo.rb +++ b/lib/geocoder/lookups/yahoo.rb @@ -60,13 +60,13 @@ module Geocoder::Lookup end def query_url_params(query) - super.merge( + { :location => query.sanitized_text, :flags => "JXTSR", :gflags => "AC#{'R' if query.reverse_geocode?}", :locale => "#{configuration.language}_US", :appid => configuration.api_key - ) + }.merge(super) end def cache_key(query) diff --git a/lib/geocoder/lookups/yandex.rb b/lib/geocoder/lookups/yandex.rb index 9e93d50f8755b1f8761a561d672ac1eb76a875cb..f5559efbdd865ce4080358acd1b303595f1b1199 100644 --- a/lib/geocoder/lookups/yandex.rb +++ b/lib/geocoder/lookups/yandex.rb @@ -43,12 +43,12 @@ module Geocoder::Lookup else q = query.sanitized_text end - super.merge( + { :geocode => q, :format => "json", :plng => "#{configuration.language}", # supports ru, uk, be :key => configuration.api_key - ) + }.merge(super) end end end diff --git a/test/lookup_test.rb b/test/lookup_test.rb index eeba7ba5d43e986a19ffa54b2855f3c566fcd114..51c2e0d600ccf58a52ff579a1b4cce277c069b72 100644 --- a/test/lookup_test.rb +++ b/test/lookup_test.rb @@ -33,6 +33,27 @@ class LookupTest < Test::Unit::TestCase end end + { + :bing => :key, + :geocoder_ca => :auth, + :google => :language, + :google_premier => :language, + :mapquest => :key, + :maxmind => :l, + :nominatim => :"accept-language", + :yahoo => :locale, + :yandex => :plng + }.each do |l,p| + define_method "test_passing_param_to_#{l}_query_overrides_configuration_value" do + set_api_key!(l) + url = Geocoder::Lookup.get(l).query_url(Geocoder::Query.new( + "test", :params => {p => "xxxx"} + )) + assert_match /#{p}=xxxx/, url, + "Param passed to #{l} lookup does not override configuration value" + end + end + def test_raises_exception_on_invalid_key Geocoder.configure(:always_raise => [Geocoder::InvalidApiKey]) #Geocoder::Lookup.all_services_except_test.each do |l|