class Geocoder::Lookup::Yahoo

def base_url

def base_url
  "#{protocol}://yboss.yahooapis.com/geo/placefinder?"
end

def cache_key(query)

def cache_key(query)
  raw_url(query)
end

def map_link_url(coordinates)

def map_link_url(coordinates)
  "http://maps.yahoo.com/#lat=#{coordinates[0]}&lon=#{coordinates[1]}"
end

def name

def name
  "Yahoo BOSS"
end

def parse_raw_data(raw_data)


(which would add unnecessary complexity).
Handle that here, without parsing the XML
Yahoo returns errors as XML even when JSON format is specified.
#
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(query)

def query_url(query)
  parsed_url = URI.parse(raw_url(query))
  o = OauthUtil.new
  o.consumer_key = configuration.api_key[0]
  o.consumer_secret = configuration.api_key[1]
  base_url + o.sign(parsed_url).query_string
end

def query_url_params(query)

def query_url_params(query)
  {
    :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 raw_url(query)

def raw_url(query)
  base_url + url_query_string(query)
end

def required_api_key_parts

def required_api_key_parts
  ["consumer key", "consumer secret"]
end

def results(query)

def results(query)
  return [] unless doc = fetch_data(query)
  doc = doc['bossresponse']
  if doc['responsecode'].to_i == 200
    if doc['placefinder']['count'].to_i > 0
      return doc['placefinder']['results']
    else
      return []
    end
  else
    warn "Yahoo Geocoding API error: #{doc['responsecode']} (#{doc['reason']})."
    return []
  end
end