Class: Rack::Session::Stack

Inherits:
Abstract::ID
  • Object
show all
Defined in:
lib/rack-session-stack.rb

Defined Under Namespace

Modules: RAWS Classes: Base, Memcache, Sequel

Constant Summary collapse

DEFAULT_OPTIONS =
Abstract::ID::DEFAULT_OPTIONS.merge(:stack => nil)

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Stack

Returns a new instance of Stack.



9
10
11
12
# File 'lib/rack-session-stack.rb', line 9

def initialize(app, options={})
  super
  @stack = @default_options[:stack]
end

Instance Method Details

#generate_sidObject



14
15
16
# File 'lib/rack-session-stack.rb', line 14

def generate_sid
  UUIDTools::UUID.random_create.to_s
end

#get_session(env, sid) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/rack-session-stack.rb', line 18

def get_session(env, sid)
  unless sid && session = @stack[sid]
    @stack.create(sid = generate_sid, session = {})
  end

  session.instance_variable_set('@old', {}.merge(session))

  return [sid, session]
end

#set_session(env, sid, session, options) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rack-session-stack.rb', line 28

def set_session(env, sid, session, options)
  if options[:drop]
    @stack.delete(sid)
    return nil
  end

  if options[:renew]
    @stack.delete(sid)
    @stack.create(sid = generate_sid, session)
  else
    old = session.instance_variable_get('@old') || {}
    @stack[sid] = session if session != old
  end

  return sid
end