Skip to content
Snippets Groups Projects
Commit 5a641686 authored by Alex Reisner's avatar Alex Reisner
Browse files

Raise exceptions for Yahoo API errors.

parent cab98890
No related branches found
No related tags found
No related merge requests found
......@@ -34,6 +34,23 @@ module Geocoder::Lookup
end
end
##
# Yahoo returns errors as XML even when JSON format is specified.
# Handle that here, without parsing the XML
# (which would add unnecessary complexity).
#
def parse_raw_data(raw_data)
if raw_data.match /^<\?xml/
if raw_data.include?("Rate Limit Exceeded")
raise_error(Geocoder::OverQueryLimitError) || warn("Over API query limit.")
elsif raw_data.include?("Please provide valid credentials")
raise_error(Geocoder::InvalidApiKey) || warn("Invalid API key.")
end
else
super(raw_data)
end
end
def query_url_params(query)
super.merge(
:location => query.sanitized_text,
......
<?xml version='1.0' encoding='UTF-8'?>\n<yahoo:error xmlns:yahoo='http://yahooapis.com/v1/base.rng'\n xml:lang='en-US'>
<yahoo:description>Please provide valid credentials. OAuth oauth_problem="consumer_key_unknown", realm="yahooapis.com"</yahoo:description>\n</yahoo:error>
<?xml version="1.0" encoding="utf-8"?> <yahoo:error xmlns:yahoo="http://yahooapis.com/v1/base.rng\ <http://yahooapis.com/v1/base.rng%5C>" xml:lang="en-US">
<yahoo:description>Rate Limit Exceeded</yahoo:description> <yahoo:detail>Key has exceeded its configured rate limit.</yahoo:detail> </yahoo:error>
......@@ -105,6 +105,21 @@ class ServicesTest < Test::Unit::TestCase
assert_equal "Madison Square Garden, New York, NY 10001, United States", result.address
end
def test_yahoo_raises_exception_when_over_query_limit
Geocoder.configure(:always_raise => [Geocoder::OverQueryLimitError])
l = Geocoder::Lookup.get(:yahoo)
assert_raises Geocoder::OverQueryLimitError do
l.send(:results, Geocoder::Query.new("over limit"))
end
end
def test_yahoo_raises_exception_on_invalid_key
Geocoder.configure(:always_raise => [Geocoder::InvalidApiKey])
l = Geocoder::Lookup.get(:yahoo)
assert_raises Geocoder::InvalidApiKey do
l.send(:results, Geocoder::Query.new("invalid key"))
end
end
# --- Yandex ---
......
......@@ -110,6 +110,8 @@ module Geocoder
raise SocketError if query.text == "socket_error"
file = case query.text
when "no results"; :no_results
when "over limit"; :over_limit
when "invalid key"; :invalid_key
when "error"; :error
else :madison_square_garden
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment