From 7259baab4722d2343cbd0d81cb2aacc95d0c9461 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Thu, 5 Feb 2009 20:20:39 -0600 Subject: Restore stale session check and move after dispatch development cleanups before the request --- .../action_controller/session/abstract_store.rb | 25 +++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'actionpack/lib/action_controller/session/abstract_store.rb') diff --git a/actionpack/lib/action_controller/session/abstract_store.rb b/actionpack/lib/action_controller/session/abstract_store.rb index 9434c2e05e..41a35f867f 100644 --- a/actionpack/lib/action_controller/session/abstract_store.rb +++ b/actionpack/lib/action_controller/session/abstract_store.rb @@ -58,9 +58,28 @@ module ActionController end def load! - @id, session = @by.send(:load_session, @env) - replace(session) - @loaded = true + stale_session_check! do + @id, session = @by.send(:load_session, @env) + replace(session) + @loaded = true + end + end + + def stale_session_check! + yield + rescue ArgumentError => argument_error + if argument_error.message =~ %r{undefined class/module ([\w:]*\w)} + begin + # Note that the regexp does not allow $1 to end with a ':' + $1.constantize + rescue LoadError, NameError => const_error + raise ActionController::SessionRestoreError, "Session contains objects whose class definition isn\\'t available.\nRemember to require the classes for all objects kept in the session.\n(Original exception: \#{const_error.message} [\#{const_error.class}])\n" + end + + retry + else + raise + end end end -- cgit v1.2.3