aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/middleware/flash.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2015-09-25 15:35:34 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2015-09-25 15:35:34 -0700
commitca324a0d9080660dc9c1803f90976cecb81b5f58 (patch)
treecc0d0df92d1fef7da6706ed8b4687530175587ba /actionpack/lib/action_dispatch/middleware/flash.rb
parentd14caa300c8d3af1e04c37811ae81c7e5f596ab0 (diff)
downloadrails-ca324a0d9080660dc9c1803f90976cecb81b5f58.tar.gz
rails-ca324a0d9080660dc9c1803f90976cecb81b5f58.tar.bz2
rails-ca324a0d9080660dc9c1803f90976cecb81b5f58.zip
commit the flash after the controller finishes being serviced
Committing the flash needs to happen in order for the session to be written correctly, so lets guarantee that it actually does happen.
Diffstat (limited to 'actionpack/lib/action_dispatch/middleware/flash.rb')
-rw-r--r--actionpack/lib/action_dispatch/middleware/flash.rb26
1 files changed, 16 insertions, 10 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/flash.rb b/actionpack/lib/action_dispatch/middleware/flash.rb
index dcf39ff8ef..a5269b7219 100644
--- a/actionpack/lib/action_dispatch/middleware/flash.rb
+++ b/actionpack/lib/action_dispatch/middleware/flash.rb
@@ -18,6 +18,21 @@ module ActionDispatch
def flash_hash # :nodoc:
get_header Flash::KEY
end
+
+ def commit_flash # :nodoc:
+ session = self.session || {}
+ flash_hash = self.flash_hash
+
+ if flash_hash && (flash_hash.present? || session.key?('flash'))
+ session["flash"] = flash_hash.to_session_value
+ self.flash = flash_hash.dup
+ end
+
+ if (!session.respond_to?(:loaded?) || session.loaded?) && # (reset_session uses {}, which doesn't implement #loaded?)
+ session.key?('flash') && session['flash'].nil?
+ session.delete('flash')
+ end
+ end
end
# The flash provides a way to pass temporary primitive-types (String, Array, Hash) between actions. Anything you place in the flash will be exposed
@@ -268,15 +283,6 @@ module ActionDispatch
end
end
- def initialize(app)
- @app = app
- end
-
- def call(env)
- req = ActionDispatch::Request.new env
- @app.call(env)
- ensure
- req.commit_flash
- end
+ def self.new(app) app; end
end
end