提交 a6ce984b 编写于 作者: G Guillermo Iguaran 提交者: Godfrey Chan

Convert FlashHash in a Hash with indifferent access

上级 ba6861d0
......@@ -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'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册