class Tofu::Bartender

Attributes

prefix[R]

Public Class Methods

new(factory, name=nil) click to toggle source
# File lib/tofu.rb, line 130
def initialize(factory, name=nil)
  @factory = factory
  @prefix = name ? name : factory.to_s.split(':')[-1]
  @bar = SessionBar.new
end

Public Instance Methods

service(context) click to toggle source
# File lib/tofu.rb, line 137
def service(context)
  begin
    session = retrieve_session(context)
    catch(:tofu_done) { session.service(context) }
    store_session(context, session)
  ensure
  end
end

Private Instance Methods

make_session(context) click to toggle source
# File lib/tofu.rb, line 164
def make_session(context)
  hint = context.req_cookie(@prefix +  '_hint')
  @factory.new(self, hint)
end
retrieve_session(context) click to toggle source
# File lib/tofu.rb, line 147
def retrieve_session(context)
  sid = context.req_cookie(@prefix + '_id')
  session = @bar.fetch(sid) || make_session(context)
  return session
end
store_session(context, session) click to toggle source
# File lib/tofu.rb, line 153
def store_session(context, session)
  sid = @bar.store(session)
  context.res_add_cookie(@prefix + '_id', sid, session.expires)
  hint = session.hint
  if hint
    context.res_add_cookie(@prefix +'_hint', hint, session.hint_expires)
  end
  session.renew
  return sid
end