Class: Rack::Session::Sequel
- Inherits:
-
Abstract::Persisted
- Object
- Abstract::Persisted
- Rack::Session::Sequel
- Defined in:
- lib/rack/session/sequel.rb
Constant Summary collapse
- VERSION =
"1.0.4"- DEFAULT_OPTIONS =
Abstract::Persisted::DEFAULT_OPTIONS.merge(:table_name => :sessions)
Instance Method Summary collapse
- #db ⇒ Object
- #delete_session(req, sid, options) ⇒ Object
- #find_session(env, sid) ⇒ Object
-
#initialize(app, options = {}) ⇒ Sequel
constructor
Options arguments can be either a Sequel::Database instance, or a hash.
- #table ⇒ Object
- #write_session(req, sid, session, options) ⇒ Object
Constructor Details
#initialize(app, options = {}) ⇒ Sequel
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.
11 12 13 14 15 16 |
# File 'lib/rack/session/sequel.rb', line 11 def initialize(app, ={}) = {:db => } if .is_a? ::Sequel::Database super @mutex = Mutex.new setup_database end |
Instance Method Details
#db ⇒ Object
45 46 47 |
# File 'lib/rack/session/sequel.rb', line 45 def db @default_options[:db] end |
#delete_session(req, sid, options) ⇒ Object
38 39 40 41 42 43 |
# File 'lib/rack/session/sequel.rb', line 38 def delete_session(req, sid, ) with_lock(req) do table.filter(sid: sid).delete generate_sid unless [:drop] end end |
#find_session(env, sid) ⇒ Object
18 19 20 21 22 23 24 25 26 |
# 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 ⇒ Object
49 50 51 |
# File 'lib/rack/session/sequel.rb', line 49 def table db[@default_options[:table_name].to_sym] end |
#write_session(req, sid, session, options) ⇒ Object
28 29 30 31 32 33 34 35 36 |
# File 'lib/rack/session/sequel.rb', line 28 def write_session(req, sid, session, ) 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 |