diff --git a/lib/geocoder/lookups/ipinfo_io.rb b/lib/geocoder/lookups/ipinfo_io.rb index 2c126b11fe86de0b1f05b35c1566f7809f828204..b7966d46c5c7899ffd8a2dd4c128f312185adbb1 100644 --- a/lib/geocoder/lookups/ipinfo_io.rb +++ b/lib/geocoder/lookups/ipinfo_io.rb @@ -42,7 +42,14 @@ module Geocoder::Lookup end def reserved_result(ip) - {"message" => "Input string is not a valid IP address", "code" => 401} + { + "ip" => ip, + "city" => "", + "region" => "", + "country" => "", + "loc" => "0,0", + "postal" => "" + } end def query_url_params(query) diff --git a/lib/geocoder/results/ipinfo_io.rb b/lib/geocoder/results/ipinfo_io.rb index e588fa8e8caddffddc117d7f9b995fc22945fe74..25f9f9245f52209178beabf6d7df7e2a96fabf2b 100644 --- a/lib/geocoder/results/ipinfo_io.rb +++ b/lib/geocoder/results/ipinfo_io.rb @@ -8,7 +8,7 @@ module Geocoder::Result end def coordinates - @data['loc'].split(",").map(&:to_f) + @data['loc'].to_s.split(",").map(&:to_f) end def city @@ -36,7 +36,7 @@ module Geocoder::Result end def self.response_attributes - %w['ip', 'region', 'postal'] + %w(ip region postal) end response_attributes.each do |a| diff --git a/test/unit/lookups/ipinfo_io_test.rb b/test/unit/lookups/ipinfo_io_test.rb index 379f383814a7659b261b76facc4264219d1d8acd..a66093ce4ad91e63c3bfff0ac81b420ca7c00c94 100644 --- a/test/unit/lookups/ipinfo_io_test.rb +++ b/test/unit/lookups/ipinfo_io_test.rb @@ -14,4 +14,20 @@ class IpinfoIoTest < GeocoderTestCase query = Geocoder::Query.new("8.8.8.8") assert_match(/^https:/, query.url) end + + def test_ipinfo_io_lookup_loopback_address + Geocoder.configure(:ip_lookup => :ipinfo_io, :use_https => true) + result = Geocoder.search("127.0.0.1").first + assert_equal 0.0, result.longitude + assert_equal 0.0, result.latitude + assert_equal "127.0.0.1", result.ip + end + + def test_ipinfo_io_extra_attributes + Geocoder.configure(:ip_lookup => :ipinfo_io, :use_https => true) + result = Geocoder.search("8.8.8.8").first + assert_equal "8.8.8.8", result.ip + assert_equal "California", result.region + assert_equal "94040", result.postal + end end