class Rack::Session::Sequel

Constants

DEFAULT_OPTIONS
VERSION

Public Class Methods

new(app, options={}) click to toggle source

Options arguments can be either a Sequel::Database instance, or a hash. Options beyond those defined in Rack::Session::Abstract::Persisted include:

:db => The a Sequel database object.
:table_name => The name of the table to store session data. Defaults to :sessions.
Calls superclass method
# File lib/rack/session/sequel.rb, line 11
def initialize(app, options={})
  options = {:db => options } if options.is_a? ::Sequel::Database
  super
  @mutex = Mutex.new
  setup_database
end

Public Instance Methods

db() click to toggle source
# File lib/rack/session/sequel.rb, line 45
def db
  @default_options[:db]
end
delete_session(req, sid, options) click to toggle source
# File lib/rack/session/sequel.rb, line 38
def delete_session(req, sid, options)
  with_lock(req) do
    table.filter(sid: sid).delete
    generate_sid unless options[:drop]
  end
end
find_session(env, sid) click to toggle source
# File lib/rack/session/sequel.rb, line 18
def find_session(env, sid)
  record = table.filter(sid: sid).first
  if record
    session = Marshal.load(record[:session].unpack('m*').first)
  else
    sid, session = generate_sid, {}
  end
  [sid, session]
end
table() click to toggle source
# File lib/rack/session/sequel.rb, line 49
def table
  db[@default_options[:table_name].to_sym]
end
write_session(req, sid, session, options) click to toggle source
# File lib/rack/session/sequel.rb, line 28
def write_session(req, sid, session, options)
  with_lock(req) do
    session_data = [Marshal.dump(session)].pack('m*')
    if table.where(sid: sid).update(session: session_data, :updated_at => Time.now.utc) == 0
      table.insert(sid: sid, session: session_data, :created_at => Time.now.utc)
    end
    sid
  end
end

Protected Instance Methods

setup_database() click to toggle source
# File lib/rack/session/sequel.rb, line 62
def setup_database
  db.create_table(@default_options[:table_name]) do
    String :sid, :unique => true, :null => false, :primary_key => true
    text :session, :null => false
    DateTime :created_at, :null => false
    DateTime :updated_at
  end unless db.table_exists? @default_options[:table_name]
end
with_lock(req) { || ... } click to toggle source
# File lib/rack/session/sequel.rb, line 55
def with_lock(req)
  @mutex.lock if req.env['rack.multithread']
  yield
ensure
  @mutex.unlock if @mutex.locked?
end