class Turnstile::Redis::Adapter
Constants
- SEP
Attributes
config[RW]
connection_pool[RW]
Public Class Methods
new(config = Turnstile.config)
click to toggle source
def redis
@redis ||= ConnectionPool::Wrapper.new(size: 3, timeout: 15, &redis_factory)
end
# File lib/turnstile/redis/adapter.rb, line 86 def initialize(config = Turnstile.config) self.config = config self.connection_pool end
Public Instance Methods
add(uid, platform, ip)
click to toggle source
noinspection RubyResolve
# File lib/turnstile/redis/adapter.rb, line 20 def add(uid, platform, ip) key = compose_key(uid, platform, ip) timeout(config.redis.timeout) do with_redis do |redis| redis.setex(key, config.activity_interval, 1) end end rescue StandardError => e error "exception while writing to redis: #{e.inspect}" end
aggregate()
click to toggle source
# File lib/turnstile/redis/adapter.rb, line 48 def aggregate all_keys.inject({}) { |hash, key| increment_platform(hash, key) }.tap do |h| h['total'] = h.values.inject(&:+) || 0 end end
all_keys()
click to toggle source
# File lib/turnstile/redis/adapter.rb, line 42 def all_keys with_redis do |redis| redis.keys("#{prefix}*") end end
compose_key(uid, platform = nil, ip = nil)
click to toggle source
# File lib/turnstile/redis/adapter.rb, line 75 def compose_key(uid, platform = nil, ip = nil) "#{prefix}#{uid}#{SEP}#{platform}#{SEP}#{ip}" end
fetch()
click to toggle source
# File lib/turnstile/redis/adapter.rb, line 31 def fetch all_keys.map do |key| fields = key.split(SEP) { uid: fields[1], platform: fields[2], ip: fields[3], } end end
increment_platform(hash, key)
click to toggle source
# File lib/turnstile/redis/adapter.rb, line 54 def increment_platform(hash, key) tuple = key.flatten if key.is_a?(Array) tuple = key.split(SEP) if key.is_a?(String) platform = tuple[2] raise ArgumentError, "can't determine platform from the key #{key.inspect}" unless platform hash[platform] ||= 0 hash[platform] += 1 hash end
rconfig()
click to toggle source
# File lib/turnstile/redis/adapter.rb, line 71 def rconfig config.redis end
Private Instance Methods
prefix()
click to toggle source
# File lib/turnstile/redis/adapter.rb, line 91 def prefix @prefix ||= "#{Turnstile::NS}|#{config.redis.namespace.gsub(/#{SEP}/, ':')}#{SEP}" end