Permalink
Browse files

Convert FlashHash in a Hash with indifferent access

  • Loading branch information...
1 parent ba6861d commit a6ce984b49519de7701aa13d04300c9d03cf8f72 @guilleiguaran guilleiguaran committed with chancancode Feb 9, 2014
Showing with 25 additions and 4 deletions.
  1. +15 −4 actionpack/lib/action_dispatch/middleware/flash.rb
  2. +10 −0 actionpack/test/controller/flash_hash_test.rb
@@ -50,13 +50,14 @@ def initialize(flash)
end
def []=(k, v)
+ k = k.to_s
@flash[k] = v
@flash.discard(k)
v
end
def [](k)
- @flash[k]
+ @flash[k.to_s]
end
# Convenience accessor for <tt>flash.now[:alert]=</tt>.
@@ -92,7 +93,7 @@ def to_session_value
end
def initialize(flashes = {}, discard = []) #:nodoc:
- @discard = Set.new(discard)
+ @discard = Set.new(stringify_array(discard))
@flashes = flashes
@now = nil
end
@@ -106,16 +107,17 @@ def initialize_copy(other)
end
def []=(k, v)
+ k = k.to_s
@discard.delete k
@flashes[k] = v
end
def [](k)
- @flashes[k]
+ @flashes[k.to_s]
end
def update(h) #:nodoc:
- @discard.subtract h.keys
+ @discard.subtract stringify_array(h.keys)
@flashes.update h
self
end
@@ -129,6 +131,7 @@ def key?(name)
end
def delete(key)
+ key = key.to_s
@discard.delete key
@flashes.delete key
self
@@ -186,6 +189,7 @@ def now
# flash.keep # keeps the entire flash
# flash.keep(:notice) # keeps only the "notice" entry, the rest of the flash is discarded
def keep(k = nil)
+ k = k.to_s if k
@discard.subtract Array(k || keys)
k ? self[k] : self
end
@@ -195,6 +199,7 @@ def keep(k = nil)
# flash.discard # discard the entire flash at the end of the current action
# flash.discard(:warning) # discard only the "warning" entry at the end of the current action
def discard(k = nil)
+ k = k.to_s if k
@discard.merge Array(k || keys)
k ? self[k] : self
end
@@ -231,6 +236,12 @@ def notice=(message)
def now_is_loaded?
@now
end
+
+ def stringify_array(array)
+ array.map do |item|
+ item.kind_of?(Symbol) ? item.to_s : item
+ end
+ end
end
def initialize(app)
@@ -67,6 +67,16 @@ def test_from_session_value
assert_equal({'flashes' => {'message' => 'Hello'}, 'discard' => %w[message]}, hash.to_session_value)
end
+ def test_from_session_value_on_json_serializer
+ decrypted_data = "{ \"session_id\":\"d98bdf6d129618fc2548c354c161cfb5\", \"flash\":{\"discard\":[], \"flashes\":{\"message\":\"hey you\"}} }"
+ session = ActionDispatch::Cookies::JsonSerializer.load(decrypted_data)
+ hash = Flash::FlashHash.from_session_value(session['flash'])
+
+ assert_equal({'discard' => %w[message], 'flashes' => { 'message' => 'hey you'}}, hash.to_session_value)
+ assert_equal "hey you", hash[:message]
+ assert_equal "hey you", hash["message"]
+ end
+
def test_empty?
assert @hash.empty?
@hash['zomg'] = 'bears'

0 comments on commit a6ce984

Please sign in to comment.