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