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

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;

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://476485]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (8)
As of 2017-03-24 11:20 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (301 votes). Check out past polls.