diff options
author | Jon Leighton <j@jonathanleighton.com> | 2012-11-08 13:59:57 -0800 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2012-11-08 13:59:57 -0800 |
commit | 36376560fdd02f955ae3bf6b7792b784443660ad (patch) | |
tree | bc60ad4c3f158f911be6166f66c2492f5ac07786 /actionpack/lib/action_dispatch/middleware/flash.rb | |
parent | 3148ed9a4bb7efef30b846dc945d73ceebcc3f0f (diff) | |
parent | 76a0237cf08f9cd81a2607dc179c8620bcf2781e (diff) | |
download | rails-36376560fdd02f955ae3bf6b7792b784443660ad.tar.gz rails-36376560fdd02f955ae3bf6b7792b784443660ad.tar.bz2 rails-36376560fdd02f955ae3bf6b7792b784443660ad.zip |
Merge pull request #8017 from jcoglan/objectless_sessions
Store FlashHashes in the session as plain hashes
Diffstat (limited to 'actionpack/lib/action_dispatch/middleware/flash.rb')
-rw-r--r-- | actionpack/lib/action_dispatch/middleware/flash.rb | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/flash.rb b/actionpack/lib/action_dispatch/middleware/flash.rb index 9928b7cc3a..df87edd156 100644 --- a/actionpack/lib/action_dispatch/middleware/flash.rb +++ b/actionpack/lib/action_dispatch/middleware/flash.rb @@ -4,7 +4,7 @@ module ActionDispatch # read a notice you put there or <tt>flash["notice"] = "hello"</tt> # to put a new one. def flash - @env[Flash::KEY] ||= (session["flash"] || Flash::FlashHash.new).tap(&:sweep) + @env[Flash::KEY] ||= Flash::FlashHash.from_session_value(session["flash"]) end end @@ -70,16 +70,30 @@ module ActionDispatch end end - # Implementation detail: please do not change the signature of the - # FlashHash class. Doing that will likely affect all Rails apps in - # production as the FlashHash currently stored in their sessions will - # become invalid. class FlashHash include Enumerable - def initialize #:nodoc: - @discard = Set.new - @flashes = {} + def self.from_session_value(value) + flash = case value + when FlashHash # Rails 3.1, 3.2 + new(value.instance_variable_get(:@flashes), value.instance_variable_get(:@used)) + when Hash # Rails 4.0 + new(value['flashes'], value['discard']) + else + new + end + + flash.tap(&:sweep) + end + + def to_session_value + return nil if empty? + {'discard' => @discard.to_a, 'flashes' => @flashes} + end + + def initialize(flashes = {}, discard = []) #:nodoc: + @discard = Set.new(discard) + @flashes = flashes @now = nil end @@ -223,7 +237,7 @@ module ActionDispatch if flash_hash if !flash_hash.empty? || session.key?('flash') - session["flash"] = flash_hash + session["flash"] = flash_hash.to_session_value new_hash = flash_hash.dup else new_hash = flash_hash |