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