class ActionDispatch::Session::LibmemcachedStore

Public Class Methods

new(app, options = {}) click to toggle source
Calls superclass method
# File lib/action_dispatch/session/libmemcached_store.rb, line 8
def initialize(app, options = {})
  options[:expire_after] ||= options[:expires]
  super
  client_options = { default_ttl: options.fetch(:expire_after, 0) }
  client_options[:prefix_key] = options[:prefix_key] || options[:namespace] || 'rack:session'
  @mutex = Mutex.new
  @pool = options[:cache] || Memcached.new(@default_options[:memcache_server], client_options)
end

Private Instance Methods

destroy(env) click to toggle source

Deprecated since Rails 3.1.0

# File lib/action_dispatch/session/libmemcached_store.rb, line 61
def destroy(env)
  if sid = current_session_id(env)
    with_lock(env, false) do
      @pool.delete(sid)
    end
  end
end
destroy_session(env, session_id, options = {}) click to toggle source
# File lib/action_dispatch/session/libmemcached_store.rb, line 51
def destroy_session(env, session_id, options = {})
  with_lock(env, nil) do
    @pool.delete(session_id)
    generate_sid unless options[:drop]
  end
end
generate_sid() click to toggle source
Calls superclass method
# File lib/action_dispatch/session/libmemcached_store.rb, line 19
def generate_sid
  loop do
    sid = super
    begin
      @pool.exist(sid)
    rescue Memcached::NotFound
      break sid
    end
  end
end
get_session(env, sid) click to toggle source
# File lib/action_dispatch/session/libmemcached_store.rb, line 30
def get_session(env, sid)
  sid ||= generate_sid
  session = with_lock(env, {}) do
    begin
      @pool.get(sid)
    rescue Memcached::NotFound
      {}
    end
  end
  [sid, session]
end
set_session(env, session_id, new_session, options = {}) click to toggle source
# File lib/action_dispatch/session/libmemcached_store.rb, line 42
def set_session(env, session_id, new_session, options = {})
  expiry = options[:expire_after].to_i

  with_lock(env, false) do
    @pool.set(session_id, new_session, expiry)
    session_id
  end
end
with_lock(env, default) { || ... } click to toggle source
# File lib/action_dispatch/session/libmemcached_store.rb, line 69
def with_lock(env, default)
  @mutex.lock if env['rack.multithread']
  yield
rescue Memcached::Error => e
  default
ensure
  @mutex.unlock if @mutex.locked?
end