From 1b851d1902c74af70b66850ba613e1af7d5238ef Mon Sep 17 00:00:00 2001 From: Dennis de Reus Date: Sat, 21 Apr 2012 19:48:53 +0200 Subject: [PATCH] Added each method to flash --- lib/rack/flash.rb | 7 +++++++ test/test_flash.rb | 21 +++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/rack/flash.rb b/lib/rack/flash.rb index 6b2935a..688673f 100644 --- a/lib/rack/flash.rb +++ b/lib/rack/flash.rb @@ -34,6 +34,13 @@ def []=(key,val) cache[key] = values[key] = val end + # Mimic the each function of a normal hash for the flash values + def each(&block) + cache.merge! values + values = {} + cache.each(&block) + end + # Store a flash entry for only the current request, swept regardless of # whether or not it was actually accessed. Useful for AJAX requests, where # you want a flash message, even though you're response isn't redirecting. diff --git a/test/test_flash.rb b/test/test_flash.rb index a670940..a3cc23c 100644 --- a/test/test_flash.rb +++ b/test/test_flash.rb @@ -1,7 +1,7 @@ require File.dirname(__FILE__) + '/helper' describe 'Rack::Flash' do - include Rack::Test::Methods + extend Rack::Test::Methods def app(&block) return Sinatra.new &block @@ -26,6 +26,14 @@ def new_flash(entries={}) new_flash[:foo] = 'bar' new_flash['foo'].should.equal('bar') end + + it 'has an each method' do + new_flash[:foo] = 'bar' + new_flash[:fizz] = 'buzz' + new_flash.each do |k,v| + k == :foo ? v.should.equal('bar') : v.should.equal('buzz') + end + end it 'deletes entries from session after retrieval' do new_flash[:foo] = 'bar' @@ -74,7 +82,7 @@ def new_flash(entries={}) flash = new_flash flash[:foo] = 'bar' @fake_session.clear - flash['foo'].should.equal(nil) + flash[:foo].should.equal('bar') end describe 'accessorize option' do @@ -132,8 +140,13 @@ def new_flash(entries={}) end describe 'integration' do + + def app(&block) + return Sinatra.new &block + end + it 'provides :sweep option to clear unused entries' do - app { + app do use Rack::Flash, :sweep => true set :sessions, true @@ -141,7 +154,7 @@ def new_flash(entries={}) get '/' do 'ok' end - } + end fake_flash = Rack::FakeFlash.new(:foo => 'bar')