Skip to content

@mislav /geoip_service.rb
Created

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Simple GeoIP service class using freegeoip.net and Faraday
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.