From 7c090509994faa19fcbd534aa78324b70b659627 Mon Sep 17 00:00:00 2001
From: Joshua Peek <josh@joshpeek.com>
Date: Tue, 16 Dec 2008 01:00:48 -0600
Subject: Lazy load flash access

---
 actionpack/lib/action_controller/flash.rb        | 22 +++++++++++++---------
 actionpack/lib/action_controller/test_process.rb |  2 +-
 2 files changed, 14 insertions(+), 10 deletions(-)

(limited to 'actionpack')

diff --git a/actionpack/lib/action_controller/flash.rb b/actionpack/lib/action_controller/flash.rb
index 6378a7f25b..9856dbed2a 100644
--- a/actionpack/lib/action_controller/flash.rb
+++ b/actionpack/lib/action_controller/flash.rb
@@ -27,8 +27,8 @@ module ActionController #:nodoc:
     def self.included(base)
       base.class_eval do
         include InstanceMethods
-        alias_method_chain :assign_shortcuts, :flash
-        alias_method_chain :reset_session,    :flash
+        alias_method_chain :perform_action, :flash
+        alias_method_chain :reset_session,  :flash
       end
     end
 
@@ -135,22 +135,26 @@ module ActionController #:nodoc:
 
     module InstanceMethods #:nodoc:
       protected
+        def perform_action_with_flash
+          perform_action_without_flash
+          remove_instance_variable(:@_flash) if defined? @_flash
+        end
+
         def reset_session_with_flash
           reset_session_without_flash
-          remove_instance_variable(:@_flash)
+          remove_instance_variable(:@_flash) if defined? @_flash
         end
 
         # Access the contents of the flash. Use <tt>flash["notice"]</tt> to
         # read a notice you put there or <tt>flash["notice"] = "hello"</tt>
         # to put a new one.
         def flash #:doc:
-          @_flash ||= session["flash"] ||= FlashHash.new
-        end
+          unless defined? @_flash
+            @_flash = session["flash"] ||= FlashHash.new
+            @_flash.sweep
+          end
 
-      private
-        def assign_shortcuts_with_flash(request, response) #:nodoc:
-          assign_shortcuts_without_flash(request, response)
-          flash.sweep if @_session
+          @_flash
         end
     end
   end
diff --git a/actionpack/lib/action_controller/test_process.rb b/actionpack/lib/action_controller/test_process.rb
index c35c3c07e8..c613d6b862 100644
--- a/actionpack/lib/action_controller/test_process.rb
+++ b/actionpack/lib/action_controller/test_process.rb
@@ -232,7 +232,7 @@ module ActionController #:nodoc:
 
     # Do we have a flash?
     def has_flash?
-      !session['flash'].empty?
+      !flash.empty?
     end
 
     # Do we have a flash that has contents?
-- 
cgit v1.2.3