47 lines
1.6 KiB
Ruby
47 lines
1.6 KiB
Ruby
module JamRuby
|
|
class MaxMindGeo < ActiveRecord::Base
|
|
|
|
self.table_name = 'max_mind_geo'
|
|
|
|
def self.ip_lookup(ip_addy)
|
|
self.where(["ip_start <= ? AND ip_end >= ?",
|
|
ip_addy, ip_addy])
|
|
.limit(1)
|
|
.first
|
|
end
|
|
|
|
def self.import_from_max_mind(file)
|
|
# File Geo-139
|
|
# Format:
|
|
# startIpNum,endIpNum,country,region,city,postalCode,latitude,longitude,dmaCode,areaCode
|
|
|
|
MaxMindGeo.transaction do
|
|
cols = [:startIpNum, :endIpNum, :country, :region, :city, :latitude, :longitude]
|
|
MaxMindGeo.delete_all
|
|
File.open(file, 'r:ISO-8859-1') do |io|
|
|
MaxMindGeo.pg_copy_from(io, :map => {
|
|
'startIpNum' => 'ip_start',
|
|
'endIpNum' => 'ip_end',
|
|
'country' => 'country',
|
|
'region' => 'region',
|
|
'city' => 'city',
|
|
'latitude' => 'lat',
|
|
'longitude' => 'lng'},
|
|
:columns => cols) do |row|
|
|
row[0] = row[0]
|
|
row[1] = row[1]
|
|
row[2] = MaxMindIsp.strip_quotes(row[2])
|
|
row[3] = MaxMindIsp.strip_quotes(row[3])
|
|
row[4] = MaxMindIsp.strip_quotes(row[4])
|
|
row.delete_at(5)
|
|
row.delete_at(-1) if 8 <= row.count
|
|
row.delete_at(-1) if 8 <= row.count
|
|
end
|
|
end
|
|
end
|
|
User.find_each { |usr| usr.update_lat_lng }
|
|
end
|
|
end
|
|
|
|
end
|