1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
require 'geocoder/lookups/base'
require 'geocoder/results/ipbase'
module Geocoder::Lookup
class Ipbase < Base
def name
"ipbase.com"
end
def supported_protocols
[:https]
end
private # ---------------------------------------------------------------
def base_query_url(query)
"https://api.ipbase.com/v2/info?"
end
def query_url_params(query)
{
:ip => query.sanitized_text,
:apikey => configuration.api_key
}
end
def results(query)
# don't look up a loopback or private address, just return the stored result
return [reserved_result(query.text)] if query.internal_ip_address?
doc = fetch_data(query) || {}
doc.fetch("data", {})["location"] ? [doc] : []
end
def reserved_result(ip)
{
"data" => {
"ip" => ip,
"location" => {
"city" => { "name" => "" },
"country" => { "alpha2" => "RD", "name" => "Reserved" },
"region" => { "alpha2" => "", "name" => "" },
"zip" => ""
}
}
}
end
end
end
|