From 08286a12e5a38bcac394f71e9f33662519e4d4d7 Mon Sep 17 00:00:00 2001 From: Alex Reisner <alex@alexreisner.com> Date: Sat, 22 Dec 2012 20:01:47 -0500 Subject: [PATCH] Make params passed to Query override config values. If you do this: Geocoder::Query.new("Kremlin, Moscow", :params => {:language => "ru"}) you should get a response in Russian ("ru") regardless of the value set in Geocoder.configure(...). --- lib/geocoder/lookups/bing.rb | 4 ++-- lib/geocoder/lookups/geocoder_ca.rb | 4 ++-- lib/geocoder/lookups/google.rb | 4 ++-- lib/geocoder/lookups/google_premier.rb | 2 +- lib/geocoder/lookups/mapquest.rb | 5 ++--- lib/geocoder/lookups/maxmind.rb | 4 ++-- lib/geocoder/lookups/nominatim.rb | 4 ++-- lib/geocoder/lookups/yahoo.rb | 4 ++-- lib/geocoder/lookups/yandex.rb | 4 ++-- test/lookup_test.rb | 21 +++++++++++++++++++++ 10 files changed, 38 insertions(+), 18 deletions(-) diff --git a/lib/geocoder/lookups/bing.rb b/lib/geocoder/lookups/bing.rb index 44184508..b99c8d6c 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 81e1f850..7ec7c1e9 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 96387c45..c16bf85f 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 d555c632..d59adf9d 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 a0e31f39..8c325e49 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 ba41e40e..e0275033 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 aea86e4b..e8d36d00 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 a271b776..0c27cc0c 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 9e93d50f..f5559efb 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 eeba7ba5..51c2e0d6 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| -- GitLab