class GeoIPMulti

Public Class Methods

new(*filenames) click to toggle source
# File lib/geoip_multi.rb, line 101
def initialize (*filenames)
  @geoip_databases=[]
  filenames=Dir.glob(File.join(File.expand_path($0)[/(.*\/)/],'*.dat')) if filenames.length == 0
  add_database(filenames)
end

Public Instance Methods

add_database(*filenames) click to toggle source
# File lib/geoip_multi.rb, line 107
def add_database (*filenames)
  filenames.flatten!
  filenames.each do |filename|
    if File.directory?(filename)
      Dir.glob(File.join(filename,'*.dat')) {|filename| @geoip_databases << GeoIP.new(filename)}
    else
      GeoIP.new(filename)
      @geoip_databases << GeoIP.new(filename)
    end
  end
end
lookup(ip) click to toggle source
# File lib/geoip_multi.rb, line 119
def lookup(ip)
  results ={}
  @geoip_databases.each do |current_database|
    case current_database.database_type
      #IPv4 addresses expected, IPv6 not currently supported, maybe in the future...
      when GEOIP_COUNTRY_EDITION
        results.merge!(current_database.country(ip).to_hash)
      when GEOIP_CITY_EDITION_REV1
        results.merge!(current_database.city(ip).to_hash)
        results.merge!(:netmask=>current_database.netmask(ip))
        iprange = current_database.range_by_ip(ip)
        results.merge!(:first_ip => iprange[0],:last_ip => iprange[1])
      when GEOIP_ISP_EDITION
        results.merge!(:isp=>current_database.isp(ip))
      when GEOIP_ORG_EDITION
        results.merge!(current_database.filename[/([^\/]+)$/][/(?:GeoIP)?([^.]+)/,1].downcase.to_sym => current_database.isp(ip))
      when GEOIP_ASNUM_EDITION
        results.merge!(current_database.asn(ip).to_hash)
      else
        puts "Unknown or Unsupported GeoIP database type:"
        puts "filename:#{current_database.filename} => database_type:#{current_database.database_type}"
    end
  end
  results
end