UNPKG

geoip-api

Version:

A library to ask several online geo-ip services for ip geo information

45 lines (31 loc) 827 B
_ = require 'lodash' class Cache constructor: (options) -> @options = _.defaults options, max: 500 @ips = {} @access = {} set: (data) -> data.info.fromCache = true # @ips[data.info.ip] = @ips[data.info.ip] or [] # @ips[data.info.ip].push(data) # @ips[data.info.ip] = _.sortByOrder @ips[data.info.ip], ['rating', 'time'], [true, false] @ips[data.info.ip] = data @manage() get: (ip, callback) -> entry = @ips[ip] if not entry return callback(null, null) @access[ip] = Date.now() callback(null, entry) manage: () -> if @ips.length >= @options.max oldestIp = null oldestAccess = Date.now() for ip, lastAccess of @access if lastAccess < oldestAccess oldestAccess = lastAccess oldestIp = ip delete @access[ip] delete @ips[ip] module.exports = Cache