class Geocoder::Lookup::Bing

def results(query)

def results(query)
  return [] unless doc = fetch_data(query)
  if doc['statusCode'] == 200
    return doc['resourceSets'].first['estimatedTotal'] > 0 ? doc['resourceSets'].first['resources'] : []
  elsif doc['statusCode'] == 401 and doc["authenticationResultCode"] == "InvalidCredentials"
    raise_error(Geocoder::InvalidApiKey) || Geocoder.log(:warn, "Invalid Bing API key.")
  elsif doc['statusCode'] == 403
    raise_error(Geocoder::RequestDenied) || Geocoder.log(:warn, "Bing Geocoding API error: Forbidden Request")
  elsif [500, 503].include?(doc['statusCode'])
    raise_error(Geocoder::ServiceUnavailable) ||
      Geocoder.log(:warn, "Bing Geocoding API error: Service Unavailable")
  else
    Geocoder.log(:warn, "Bing Geocoding API error: #{doc['statusCode']} (#{doc['statusDescription']}).")
  end
  return []
end