Sha256: 6145b4b8082bf6b4c0e5a55958503764155f2c3fab1023e446dec186b1574de0

Contents?: true

Size: 1.03 KB

Versions: 2

Compression:

Stored size: 1.03 KB

Contents

require_relative "store/instrumentation"
require_relative "store/logging"

class StoredSession::Store < ActionDispatch::Session::AbstractSecureStore
  include StoredSession::Store::Logging
  include StoredSession::Store::Instrumentation

  attr_reader :session_class

  def initialize(app, options = {})
    super
    @session_class = options.fetch(:session_class) { StoredSession.config.session_class }
  end

  def find_session(env, sid)
    instrument(:read, sid) do |payload|
      if sid && (data = session_class.read(sid.private_id))
        [ sid, data || {} ]
      else
        [ generate_sid, {} ]
      end
    end
  end

  def write_session(req, sid, session, options)
    instrument(:write, sid) do |payload|
      return false unless session_class.write(sid.private_id, session)

      sid
    end
  end

  def delete_session(req, sid, options)
    instrument(:delete, sid) do |payload|
      session_class.by_sid(sid.private_id).delete_all
      generate_sid
    end
  end

  ActiveSupport.run_load_hooks(:stored_session_store, self)
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
stored_session-0.4.0 lib/stored_session/store.rb
stored_session-0.3.0 lib/stored_session/store.rb