Sha256: 365eec7abd261ab48504939434abeb75f3c5d30188fc0e87d4661dd779d2b1c6
Contents?: true
Size: 868 Bytes
Versions: 2
Compression:
Stored size: 868 Bytes
Contents
require_relative "initialize_with_redis" require 'ipaddr' class Trifle class Finder include InitializeWithRedis def handle ip ip_i = IPAddr.new(ip).to_i find(ip_i, 0, max) rescue ArgumentError => ex nil end protected def find ip_i, lower, upper return nil if lower >= upper index = (lower+upper)/2 current = entry_for(index) if in_range(current, ip_i) current.last(2) elsif ip_i < current[0] find ip_i, lower, index-1 else find ip_i, index+1, upper end end def max redis.llen(key) end def entry_for index entry = redis.lindex(key, index).split(":") entry[0] = entry[0].to_i entry[1] = entry[1].to_i entry end def in_range range, ip_i range[0] <= ip_i && ip_i <= range[1] end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
trifle-0.0.7 | lib/trifle/finder.rb |
trifle-0.0.6 | lib/trifle/finder.rb |