class TrickSerial::Serializer::CgiSession::Store
Defines a Session store Decorator that interjects TrickSerial::Serializer
inside restore
, update
, etc.
Example:
cgi = CGI.new("html4") session = CGI::Session.new( 'database_manager' => TrickSerial::Serializer::CgiSession::Store, # The Decorator. 'TrickSerial.database_manager' => CGI::Session::PStore, # Actual store Class. # Options for PStore instance: 'tmpdir' => '/tmp/mysessions', 'session_key' => 'mykey', ... )
Attributes
logger[RW]
logger_level[RW]
Public Class Methods
new(session, option={})
click to toggle source
Options:
'TrickSerial.database_manager': the actual session Store class (e.g.: CGI::Session::PStore). 'TrickSerial.dbman': an actual session store instance. 'TrickSerial.serializer': a clonable instance of TrickSerial::Serializer. 'TrickSerial.logger': a Log4r object. 'TrickSerial.logger_level': a Symbol for the logger level (e.g: :debug)
The remaining options are passed to the actual Store
specified by :'TrickSerial.database_manager'.
# File lib/trick_serial/serializer/cgi_session.rb, line 59 def initialize(session, option={}) @session = session @option = option @dbman_cls = option.delete('TrickSerial.database_manager') || (raise "#{self} options did not specify TrickSerial.database_manager: #{option.inspect}") @dbman = option.delete('TrickSerial.dbman') # option['new_session'] = true @option['database_manager'] = @dbman_cls @serializer = option.delete('TrickSerial.serializer') @logger = option.delete('TrickSerial.logger') @logger_level = option.delete('TrickSerial.logger_level') || :debug _log { "creating #{self} for #{option.inspect}" } end
Public Instance Methods
_dbman()
click to toggle source
# File lib/trick_serial/serializer/cgi_session.rb, line 73 def _dbman @dbman ||= begin # Fool decorated Store. save = @session.new_session @session.new_session = true # debugger @dbman_cls.new(@session, @option) ensure @session.new_session = save end end
_log(msg = nil) { || ... }
click to toggle source
# File lib/trick_serial/serializer/cgi_session.rb, line 125 def _log msg = nil msg ||= yield if block_given? if msg && @logger @logger.send(@logger_level, msg) end end
_make_serializer()
click to toggle source
# File lib/trick_serial/serializer/cgi_session.rb, line 86 def _make_serializer (@serializer || TrickSerial::Serializer.default).dup end
close()
click to toggle source
# File lib/trick_serial/serializer/cgi_session.rb, line 109 def close _log { "#{self} close" } serializer = _make_serializer data_save = _dbman._data _dbman._data = serializer.encode(_dbman._data) _dbman.encode_with_trick_serial_serializer! if _dbman.respond_to?(:encode_with_trick_serial_serializer!) _dbman.close ensure _dbman._data = data_save end
delete()
click to toggle source
# File lib/trick_serial/serializer/cgi_session.rb, line 120 def delete _log { "#{self} delete" } _dbman.delete end
restore()
click to toggle source
# File lib/trick_serial/serializer/cgi_session.rb, line 90 def restore _log { "#{self} restore" } _dbman.restore _dbman.decode_with_trick_serial_serializer! if _dbman.respond_to?(:decode_with_trick_serial_serializer!) _dbman._data end
update()
click to toggle source
# File lib/trick_serial/serializer/cgi_session.rb, line 97 def update _log { "#{self} update" } serializer = _make_serializer data_save = _dbman._data _dbman._data = serializer.encode(_dbman._data) _dbman.encode_with_trick_serial_serializer! if _dbman.respond_to?(:encode_with_trick_serial_serializer!) # debugger _dbman.update ensure _dbman._data = data_save end