class Rakuna::Session::Redis::Session

A session backed by redis.

Public Class Methods

new(redis, session_id, options = {}) click to toggle source
# File lib/rakuna/session/redis.rb, line 18
def initialize(redis, session_id, options = {})
  @redis = redis
  @session_id = session_id
  @namespace = options.fetch 'namespace', '_'
end

Public Instance Methods

active?() click to toggle source
# File lib/rakuna/session/redis.rb, line 35
def active?
  @redis.exists "#{session}:active"
end
get(key) click to toggle source
# File lib/rakuna/session/redis.rb, line 30
def get(key)
  @redis.hget session, key
end
renew(duration = 300) click to toggle source
# File lib/rakuna/session/redis.rb, line 40
def renew(duration = 300)
  @redis.set "#{session}:active", true, ex: duration
end
set(key, value) click to toggle source
# File lib/rakuna/session/redis.rb, line 25
def set(key, value)
  @redis.hset session, key, value
end

Private Instance Methods

id() click to toggle source
# File lib/rakuna/session/redis.rb, line 57
def id
  OpenSSL::HMAC.hexdigest OpenSSL::Digest::SHA256.new, seed, @session_id
end
reseed() click to toggle source
# File lib/rakuna/session/redis.rb, line 47
def reseed
  SecureRandom.uuid.tap { |uuid| @redis.set "#{@namespace}:seed", uuid }
end
seed() click to toggle source
# File lib/rakuna/session/redis.rb, line 52
def seed
  @seed ||= @redis.get("#{@namespace}:seed") || reseed
end
session() click to toggle source
# File lib/rakuna/session/redis.rb, line 62
def session
  @session ||= "#{@namespace}:#{id}"
end