diff --git a/lib/geocoder/lookups/yandex.rb b/lib/geocoder/lookups/yandex.rb index 4b306e1ef68d0eb596283c43083a60aec5ffda74..272ecea9725e3da552111841dbe97971b40bfba7 100644 --- a/lib/geocoder/lookups/yandex.rb +++ b/lib/geocoder/lookups/yandex.rb @@ -21,7 +21,11 @@ module Geocoder::Lookup def results(query) return [] unless doc = fetch_data(query) if err = doc['error'] - warn "Yandex Geocoding API error: #{err['status']} (#{err['message']})." + if err["status"] == 401 and err["message"] == "invalid key" + raise_error(Geocoder::InvalidApiKey) || warn("Invalid API key.") + else + warn "Yandex Geocoding API error: #{err['status']} (#{err['message']})." + end return [] end if doc = doc['response']['GeoObjectCollection'] diff --git a/test/services_test.rb b/test/services_test.rb index 3681c0187742c2b823506ef0931c6d7de78035f2..9c232a8593f3155658a77f3aa70bf023a43c315e 100644 --- a/test/services_test.rb +++ b/test/services_test.rb @@ -123,7 +123,7 @@ class ServicesTest < Test::Unit::TestCase # --- Yandex --- - def test_yandex_with_invalid_key + def test_yandex_warns_about_invalid_key # keep test output clean: suppress timeout warning orig = $VERBOSE; $VERBOSE = nil Geocoder.configure(:lookup => :yandex) @@ -133,6 +133,14 @@ class ServicesTest < Test::Unit::TestCase $VERBOSE = orig end + def test_yandex_raises_exception_on_invalid_key + Geocoder.configure(:always_raise => [Geocoder::InvalidApiKey]) + l = Geocoder::Lookup.get(:yandex) + assert_raises Geocoder::InvalidApiKey do + l.send(:results, Geocoder::Query.new("invalid key")) + end + end + # --- Geocoder.ca ---