Class: Rack::Session::Sequel

Inherits:
Abstract::Persisted
  • Object
show all
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

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, options={})
  options = {:db => options } if options.is_a? ::Sequel::Database
  super
  @mutex = Mutex.new
  setup_database
end

Instance Method Details

#dbObject



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, options)
  with_lock(req) do
    table.filter(sid: sid).delete
    generate_sid unless options[: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

#tableObject



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, 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