public
Last active

Simple GeoIP service class using freegeoip.net and Faraday

  • Download Gist
geoip_service.rb
Ruby
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
require 'faraday_middleware'
require 'hashie/mash'
 
# Public: GeoIP service using freegeoip.net
#
# See https://github.com/fiorix/freegeoip#readme
#
# Examples
#
# res = GeoipService.new.call '173.194.64.19'
# res.country_code #=> US
# res.city #=> Mountain View
#
# Returns a struct with the following fields:
# - ip
# - latitude, longitude
# - city
# - zipcode
# - metrocode
# - region_code, region_name
# - country_code, country_name
# - error (in case of HTTP error)
class GeoipService
def initialize http_adapter = nil
@http_adapter = http_adapter || self.class.connection
end
 
def call ip_or_hostname
@http_adapter.get(ip_or_hostname.to_s).body
rescue Faraday::Error::ClientError => error
Hashie::Mash.new :error => error
end
 
def self.connection
@connection ||= Faraday.new 'http://freegeoip.net/json/' do |conn|
conn.response :mashify
conn.response :json
conn.response :raise_error
conn.adapter :net_http
conn.options[:timeout] = 2
end
end
end

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.