diff --git a/lib/graticule/geocoder/mapquest.rb b/lib/graticule/geocoder/mapquest.rb index 66d7290..bb853a0 100644 --- a/lib/graticule/geocoder/mapquest.rb +++ b/lib/graticule/geocoder/mapquest.rb @@ -11,13 +11,14 @@ module Geocoder #:nodoc: # class Mapquest < Base - def initialize(api_key, open = false) + def initialize(api_key, open = false, limited_to_country = nil) @api_key = api_key @url = if open URI.parse('http://open.mapquestapi.com/geocoding/v1/address') else URI.parse('http://www.mapquestapi.com/geocoding/v1/address') end + @country_filter = limited_to_country end # Locates +address+ returning a Location @@ -101,7 +102,11 @@ def prepare_response(xml) # Extracts a location from +xml+. def parse_response(response) #:nodoc: - addr = response.result.locations.addresses.first + if @country_filter + addr = response.result.locations.addresses.select{|address| address.country == @country_filter}.first + else + addr = response.result.locations.addresses.first + end Location.new( :latitude => addr.latitude, :longitude => addr.longitude, diff --git a/test/fixtures/responses/mapquest/multi_country_success.xml b/test/fixtures/responses/mapquest/multi_country_success.xml new file mode 100644 index 0000000..ad4baa1 --- /dev/null +++ b/test/fixtures/responses/mapquest/multi_country_success.xml @@ -0,0 +1,171 @@ + + +0 + + +http://api.mqcdn.com/res/mqlogo.gif +© 2014 MapQuest, Inc. +© 2014 MapQuest, Inc. + + + + + +12345 US + + + + +Us +Ile-de-France +Pontoise + +FR +CITY +A5XXX +false +N + + +49.100945 +1.967247 + + +0 +s + +49.100945 +1.967247 + + + + + + + +Us +Bourgogne +Louhans + +FR +CITY +A5XXX +false +N + + +46.818792 +5.281419 + + +0 +s + +46.818792 +5.281419 + + + + + + + +Us + + + +ID +CITY +A5XXX +false +N + + +-2.771829 +132.186285 + + +0 +s + +-2.771829 +132.186285 + + + + + + + + +LA +Ascension Parish +12345 +US +ZIP +Z1XXA +false +N + + +30.280046 +-90.786583 + + +0 +s + +30.280046 +-90.786583 + + + + + + + +Uz +Midi-Pyrénées +Argelès-Gazost + +FR +CITY +A5XXX +false +N + + +42.966369 +-0.085232 + + +0 +s + +42.966369 +-0.085232 + + + + + + + + + +-1 +true +false + + + \ No newline at end of file diff --git a/test/graticule/geocoder/mapquest_test.rb b/test/graticule/geocoder/mapquest_test.rb index 7f50821..4c49984 100644 --- a/test/graticule/geocoder/mapquest_test.rb +++ b/test/graticule/geocoder/mapquest_test.rb @@ -7,10 +7,10 @@ class MapquestTest < Test::Unit::TestCase def setup URI::HTTP.responses = [] URI::HTTP.uris = [] - @geocoder = Mapquest.new('api_key') end def test_success + @geocoder = Mapquest.new('api_key') prepare_response(:success) location = Location.new( :country => "US", @@ -26,6 +26,7 @@ def test_success end def test_multi_result + @geocoder = Mapquest.new('api_key') prepare_response(:multi_result) location = Location.new( :country => "US", @@ -40,6 +41,22 @@ def test_multi_result assert_equal(location, @geocoder.locate('217 Union St., NY')) end + def test_multi_country + @geocoder = Mapquest.new('api_key', false, 'US') + prepare_response(:multi_country_success) + location = Location.new( + :country => "US", + :latitude => 30.280046, + :locality => "", + :longitude => -90.786583, + :postal_code => "12345", + :precision => :postal_code, + :region => "LA", + :street => nil + ) + assert_equal(location, @geocoder.locate('12345 us')) + end + def test_query_construction request = Mapquest::Request.new("217 Union St., NY", "api_key") query = %Q{key=api_key&outFormat=xml&inFormat=kvp&location=217%20Union%20St.,%20NY}