The default Active Record class.
Customizable data column name. Defaults to 'data'.
# File lib/active_record/session_store.rb, line 85 cattr_accessor :data_column_name
# File lib/active_record/session_store.rb, line 94 def data_column_size_limit @data_column_size_limit ||= columns_hash[data_column_name].limit end
Hook to set up sessid compatibility.
# File lib/active_record/session_store.rb, line 99 def find_by_session_id(session_id) setup_sessid_compatibility! find_by_session_id(session_id) end
# File lib/active_record/session_store.rb, line 130 def initialize(attributes = nil, options = {}) @data = nil super end
# File lib/active_record/session_store.rb, line 105 def session_id_column 'session_id' end
Compatibility with tables using sessid instead of session_id.
# File lib/active_record/session_store.rb, line 110 def setup_sessid_compatibility! # Reset column info since it may be stale. reset_column_information if columns_hash['sessid'] def self.find_by_session_id(*args) find_by_sessid(*args) end define_method(:session_id) { sessid } define_method(:session_id=) { |session_id| self.sessid = session_id } else class << self; remove_method :find_by_session_id; end def self.find_by_session_id(session_id) find :first, :conditions => {:session_id=>session_id} end end end
Lazy-unmarshal session state.
# File lib/active_record/session_store.rb, line 136 def data @data ||= self.class.unmarshal(read_attribute(@@data_column_name)) || {} end
Has the session been loaded yet?
# File lib/active_record/session_store.rb, line 143 def loaded? @data end
# File lib/active_record/session_store.rb, line 148 def marshal_data! return false unless loaded? write_attribute(@@data_column_name, self.class.marshal(data)) end
Ensures that the data about to be stored in the database is not larger than the data storage column. Raises ActionController::SessionOverflowError.
# File lib/active_record/session_store.rb, line 156 def raise_on_session_data_overflow! return false unless loaded? limit = self.class.data_column_size_limit if limit and read_attribute(@@data_column_name).size > limit raise ActionController::SessionOverflowError end end