From bc3b73352648513f3539a6f62c4765238cec4819 Mon Sep 17 00:00:00 2001 From: Niels Ganser Date: Fri, 23 Jan 2009 17:55:04 +0100 Subject: [PATCH] ActionController::Flash::FlashHash.use now returns either the value corresponding to the passed key or itself when no key is passed Since both FlashHash#keep and FlashHash#discard simply pass through whatever FlashHash#use serves them, this allows for marking a single FlashHash key or the complete FlashHash as (un)used and getting its value in one step. --- actionpack/lib/action_controller/flash.rb | 11 +++++------ actionpack/test/controller/flash_test.rb | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/actionpack/lib/action_controller/flash.rb b/actionpack/lib/action_controller/flash.rb index 56ee9c6..943124c 100644 --- a/actionpack/lib/action_controller/flash.rb +++ b/actionpack/lib/action_controller/flash.rb @@ -126,12 +126,11 @@ module ActionController #:nodoc: # use('msg') # marks the "msg" entry as used # use(nil, false) # marks the entire flash as unused (keeps it around for one more action) # use('msg', false) # marks the "msg" entry as unused (keeps it around for one more action) - def use(k=nil, v=true) - unless k.nil? - @used[k] = v - else - keys.each{ |key| use(key, v) } - end + # Returns the single value for the key you asked to be marked (un)used or the FlashHash itself + # if no key is passed. + def use(key=nil, used=true) + Array(key || keys).each { |k| @used[k] = used } + return key ? self[key] : self end end diff --git a/actionpack/test/controller/flash_test.rb b/actionpack/test/controller/flash_test.rb index d8a8928..f862bdf 100644 --- a/actionpack/test/controller/flash_test.rb +++ b/actionpack/test/controller/flash_test.rb @@ -139,4 +139,19 @@ class FlashTest < ActionController::TestCase get :std_action assert_nil @response.template.assigns["flash_copy"]["foo"] end + + def test_keep_and_discard_return_values + flash = ActionController::Flash::FlashHash.new + flash.update(:foo => :foo_indeed, :bar => :bar_indeed) + + assert_equal(:foo_indeed, flash.discard(:foo)) # valid key passed + assert_nil flash.discard(:unknown) # non existant key passed + assert_equal({:foo => :foo_indeed, :bar => :bar_indeed}, flash.discard()) # nothing passed + assert_equal({:foo => :foo_indeed, :bar => :bar_indeed}, flash.discard(nil)) # nothing passed + + assert_equal(:foo_indeed, flash.keep(:foo)) # valid key passed + assert_nil flash.keep(:unknown) # non existant key passed + assert_equal({:foo => :foo_indeed, :bar => :bar_indeed}, flash.keep()) # nothing passed + assert_equal({:foo => :foo_indeed, :bar => :bar_indeed}, flash.keep(nil)) # nothing passed + end end -- 1.6.0.2