class Geocoder::Lookup::Maxmind
def name
def name "MaxMind" end
def parse_raw_data(raw_data)
def parse_raw_data(raw_data) CSV.parse_line raw_data end
def query_url(query)
def query_url(query) "#{protocol}://geoip.maxmind.com/#{service_code}?" + url_query_string(query) end
def query_url_params(query)
def query_url_params(query) { :l => configuration.api_key, :i => query.sanitized_text }.merge(super) end
def reserved_result
def reserved_result ",,,,0,0,0,0,,," end
def results(query)
def results(query) # don't look up a loopback address, just return the stored result return [reserved_result] if query.loopback_ip_address? doc = fetch_data(query) if doc and doc.is_a?(Array) if doc.last.nil? return [doc] elsif doc.last == "INVALID_LICENSE_KEY" raise_error(Geocoder::InvalidApiKey) || warn("Invalid MaxMind API key.") end end return [] end
def service_code
def service_code if s = configuration[:service] and services.keys.include?(s) services[s] else raise( Geocoder::ConfigurationError, "When using MaxMind you MUST specify a service name: " + "Geocoder.configure(:maxmind => {:service => ...}), " + "where '...' is one of: #{services.keys.inspect}" ) end end
def services
Service names mapped to code used in URL.
#
def services { :country => "a", :city => "b", :city_isp_org => "f", :omni => "e" } end