From: Yuval Kogman Date: Mon, 5 Dec 2005 20:45:05 +0000 (+0000) Subject: flash_to_stash goodness X-Git-Tag: v0.03~8 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=19c130c28deee544c48e29e9297da771fd397066;p=catagits%2FCatalyst-Plugin-Session.git flash_to_stash goodness --- diff --git a/lib/Catalyst/Plugin/Session.pm b/lib/Catalyst/Plugin/Session.pm index ed1762b..10f864b 100644 --- a/lib/Catalyst/Plugin/Session.pm +++ b/lib/Catalyst/Plugin/Session.pm @@ -57,6 +57,16 @@ sub setup_session { $c->NEXT::setup_session(); } +sub prepare_action { + my $c = shift; + + if ( $c->config->{session}{flash_to_stash} and $c->_sessionid and my $flash_data = $c->flash ) { + @{ $c->stash }{ keys %$flash_data } = values %$flash_data; + } + + $c->NEXT::prepare_action(@_); +} + sub finalize { my $c = shift; diff --git a/t/03_flash.t b/t/03_flash.t index edbf607..a56c43b 100644 --- a/t/03_flash.t +++ b/t/03_flash.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 6; +use Test::More tests => 7; use Test::MockObject::Extends; use Test::Exception; @@ -15,6 +15,8 @@ my $c = Test::MockObject::Extends->new( $m ); $c->set_always( get_session_data => { } ); $c->set_true( "store_session_data" ); $c->set_always( _sessionid => "deadbeef"); +$c->set_always( config => { } ); +$c->set_always( stash => { } ); $c->_load_flash; @@ -40,3 +42,13 @@ $c->finalize; $c->_load_flash; is_deeply( $c->flash, {}, "nothing in flash"); + +$c->flash->{bar} = "gorch"; + +$c->config->{session}{flash_to_stash} = 1; + +$c->finalize; +$c->prepare_action; + +is_deeply( $c->stash, { bar => "gorch" }, "flash copied to stash" ); +