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

Refactor to reduce code duplication.

parent 4f56b9fc
No related branches found
No related tags found
No related merge requests found
......@@ -23,26 +23,30 @@ module Geocoder::Lookup
private # ---------------------------------------------------------------
def content_key
'result'
end
def results(query, reverse = false)
return [] unless doc = fetch_data(query)
case doc['status']
when 0
return [doc['result']] unless doc['result'].blank?
return [doc[content_key]] unless doc[content_key].blank?
when 1, 3, 4
raise_error(Geocoder::Error, "server error.") ||
Geocoder.log(:warn, "Baidu Geocoding API error: server error.")
Geocoder.log(:warn, "#{name} Geocoding API error: server error.")
when 2
raise_error(Geocoder::InvalidRequest, "invalid request.") ||
Geocoder.log(:warn, "Baidu Geocoding API error: invalid request.")
Geocoder.log(:warn, "#{name} Geocoding API error: invalid request.")
when 5
raise_error(Geocoder::InvalidApiKey, "invalid api key") ||
Geocoder.log(:warn, "Baidu Geocoding API error: invalid api key.")
Geocoder.log(:warn, "#{name} Geocoding API error: invalid api key.")
when 101, 102, 200..299
raise_error(Geocoder::RequestDenied, "request denied") ||
Geocoder.log(:warn, "Baidu Geocoding API error: request denied.")
Geocoder.log(:warn, "#{name} Geocoding API error: request denied.")
when 300..399
raise_error(Geocoder::OverQueryLimitError, "over query limit.") ||
Geocoder.log(:warn, "Baidu Geocoding API error: over query limit.")
Geocoder.log(:warn, "#{name} Geocoding API error: over query limit.")
end
return []
end
......
......@@ -2,49 +2,20 @@ require 'geocoder/lookups/base'
require 'geocoder/results/baidu_ip'
module Geocoder::Lookup
class BaiduIp < Base
class BaiduIp < Baidu
def name
"Baidu IP"
end
def required_api_key_parts
["key"]
end
def query_url(query)
"#{protocol}://api.map.baidu.com/location/ip?" + url_query_string(query)
end
# HTTP only
def supported_protocols
[:http]
end
private # ---------------------------------------------------------------
def results(query, reverse = false)
return [] unless doc = fetch_data(query)
case doc['status']
when 0
return [doc['content']] unless doc['content'].blank?
when 1, 3, 4
raise_error(Geocoder::Error, "server error.") ||
Geocoder.log(:warn, "Baidu IP Geocoding API error: server error.")
when 2
raise_error(Geocoder::InvalidRequest, "invalid request.") ||
Geocoder.log(:warn, "Baidu IP Geocoding API error: invalid request.")
when 5
raise_error(Geocoder::InvalidApiKey, "invalid api key.") ||
Geocoder.log(:warn, "Baidu IP Geocoding API error: invalid api key.")
when 101, 102, 200..299
raise_error(Geocoder::RequestDenied, "request denied.") ||
Geocoder.log(:warn, "Baidu IP Geocoding API error: request denied.")
when 300..399
raise_error(Geocoder::OverQueryLimitError, "over query limit") ||
Geocoder.log(:warn, "Baidu IP Geocoding API error: over query limit.")
end
return []
def content_key
'content'
end
def query_url_params(query)
......
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