Skip to content
Snippets Groups Projects
Commit b2b33dd8 authored by Christian Bøtker Høj's avatar Christian Bøtker Høj
Browse files

Add GeoLite2 support, both City and Country databases

parent 381c289f
No related branches found
No related tags found
No related merge requests found
......@@ -52,6 +52,7 @@ module Geocoder
[
:baidu_ip,
:freegeoip,
:geolite2,
:maxmind,
:maxmind_local,
:telize,
......
require 'ipaddr'
require 'geocoder/lookups/base'
require 'geocoder/results/geolite2'
module Geocoder
module Lookup
class Geolite2 < Base
def initialize
unless configuration[:file].nil?
begin
gem_name = 'hive_geoip2'
require gem_name
rescue LoadError
raise "Could not load maxminddb dependency. To use MaxMind2 Local \
lookup you must add the #{gem_name} gem to your Gemfile or \
have it installed in your system."
end
end
super
end
def name
'GeoLite2'
end
def required_api_key_parts
[]
end
private
def results(query)
return [] unless configuration[:file]
result = Hive::GeoIP2.lookup(query.to_s, configuration[:file].to_s)
result.nil? ? [] : [result]
end
end
end
end
require 'geocoder/results/base'
module Geocoder
module Result
class Geolite2 < Base
def address(format = :full)
s = state.to_s == '' ? '' : ", #{state}"
"#{city}#{s} #{postal_code}, #{country}".sub(/^[ ,]*/, '')
end
def coordinates
[latitude, longitude]
end
def latitude
return 0.0 unless @data['location']
@data['location']['latitude'].to_f
end
def longitude
return 0.0 unless @data['location']
@data['location']['longitude'].to_f
end
def city
return '' unless @data['city']
@data['city']['names']['en']
end
def state
return '' unless @data['subdivisions']
@data['subdivisions'][0]['names']['en']
end
def state_code
return '' unless @data['subdivisions']
@data['subdivisions'][0]['iso_code']
end
def country
@data['country']['names']['en']
end
def country_code
@data['country']['iso_code']
end
def postal_code
return '' unless @data['postal']
@data['postal']['code']
end
def self.response_attributes
%w[ip]
end
response_attributes.each do |a|
define_method a do
@data[a]
end
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment