Parent

Files

Class/Module Index [+]

Quicksearch

Rack::Session::Moneta

@api public

Attributes

mutex[R]
pool[R]

Public Class Methods

new(app, options = {}, &block) click to toggle source
# File lib/rack/session/moneta.rb, line 11
def initialize(app, options = {}, &block)
  super
  if block
    raise ArgumentError, 'Use either block or option :store' if options[:store]
    @pool = ::Moneta.build(&block)
  else
    raise ArgumentError, 'Block or option :store is required' unless @pool = options[:store]
    @pool = ::Moneta.new(@pool, :expires => true) if Symbol === @pool
  end
  @pool = ::Moneta::WeakCreate.new(@pool) unless @pool.supports?(:create)
  @mutex = ::Mutex.new
end

Public Instance Methods

destroy_session(env, session_id, options) click to toggle source
# File lib/rack/session/moneta.rb, line 51
def destroy_session(env, session_id, options)
  with_lock(env) do
    @pool.delete(session_id)
    generate_sid unless options[:drop]
  end
end
generate_sid() click to toggle source
# File lib/rack/session/moneta.rb, line 24
def generate_sid
  loop do
    sid = super
    break sid unless @pool.key?(sid)
  end
end
get_session(env, sid) click to toggle source
# File lib/rack/session/moneta.rb, line 31
def get_session(env, sid)
  with_lock(env) do
    unless sid && session = @pool[sid]
      session = {}
      begin
        sid = generate_sid
      end until @pool.create(sid, session)
    end
    [sid, session]
  end
end
set_session(env, session_id, new_session, options) click to toggle source
# File lib/rack/session/moneta.rb, line 43
def set_session(env, session_id, new_session, options)
  with_lock(env) do
    @pool.store(session_id, new_session,
                options[:expire_after] ? { :expires => options[:expire_after] } : {})
    session_id
  end
end
with_lock(env) click to toggle source
# File lib/rack/session/moneta.rb, line 58
def with_lock(env)
  @mutex.lock if env['rack.multithread']
  yield
ensure
  @mutex.unlock if @mutex.locked?
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.