Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Catalyst and the stash

by monsieur_champs (Curate)
on Jul 20, 2005 at 12:47 UTC ( #476485=note: print w/ replies, xml ) Need Help??


in reply to Catalyst and the stash

Seems to me that this is easy to solve.

Just implement a plugin that clashes with $c->stash, and override it with a method that filters things in the stash using a regular expression. This way you'll get more control over what the stash dumps into your view modules, with something easy as $c->stash( qr/.../ ). Of course, with no arguments, $c->stash() will dump everything out, as expected.

Please note that by using this, you can avoid rubishness trought being not lazy, and get all control your need over your view modules income data, without hurting the freedom of others. I would think twice before using such a thing. ;-)

All code is untested, and extremely experimental.

package Catalyst::Plugin::Stash::Filter; use warnings; use strict; use NEXT; 1; package Catalyst::Engine; use warnings; use strict; use NEXT; =item $c->stash If the first argument is a hashref, returns a hashref containing only data keys that matches $_[0]->{FILTER}. Otherwise, returns a hashref containing all your data. $c->stash->{foo} ||= 'yada'; print $c->stash->{foo}; =cut sub stash { my $self = shift; # this makes the real stash() method magic... my $stash = $self->NEXT::stash(); # this filters out everything unwanted or unknow... if( UNIVERSAL::isa( $_[0], 'HASH') && exists $_[0]->{FILTER} ){ # $strip is just a boolean. my( $criteria, $strip ) = ( $_[0]->{FILTER}, $_[0]->{STRIP} ); ## err... "borrowed" from Andy Wardley's AppConfig::State module. ## Original comments follow. ## thanks, Andy. # extract relevant keys and slice out corresponding values my @keys = grep(/$criteria/, keys %{ $stash }); my @vals = @{ $stash }{ @keys }; my %set; # clean off the $criteria part if $strip is set @keys = map { s/$criteria//; $_ } @keys if $strip; # slice values into the target hash @set{ @keys } = @vals; $stash = \%set; } return $stash; } 1;


Comment on Re: Catalyst and the stash
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://476485]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (5)
As of 2014-12-27 11:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (177 votes), past polls