From: Arthur Axel 'fREW' Schmidt Date: Fri, 22 Jan 2010 23:52:29 +0000 (-0600) Subject: changes to allow objects instead of classes for Serializers X-Git-Tag: 0.82~10 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Action-REST.git;a=commitdiff_plain;h=0c14c8cdb456eb7ece02b0b341771287c9a8da21 changes to allow objects instead of classes for Serializers --- diff --git a/lib/Catalyst/Action/Serialize.pm b/lib/Catalyst/Action/Serialize.pm index cc1f838..2bcbafb 100644 --- a/lib/Catalyst/Action/Serialize.pm +++ b/lib/Catalyst/Action/Serialize.pm @@ -10,6 +10,12 @@ use MRO::Compat; our $VERSION = '0.81'; $VERSION = eval $VERSION; +has _encoders => ( + is => 'ro', + isa => 'HashRef', + default => sub { {} }, +); + sub execute { my $self = shift; my ( $controller, $c ) = @_; @@ -36,12 +42,15 @@ sub execute { $c->log->debug( "Serializing with $sclass" . ( $sarg ? " [$sarg]" : '' ) ) if $c->debug; + $self->_encoders->{$sclass} ||= $sclass->new; + my $sobj = $self->_encoders->{$sclass}; + my $rc; eval { if ( defined($sarg) ) { - $rc = $sclass->execute( $controller, $c, $sarg ); + $rc = $sobj->execute( $controller, $c, $sarg ); } else { - $rc = $sclass->execute( $controller, $c ); + $rc = $sobj->execute( $controller, $c ); } }; if ($@) { @@ -107,7 +116,7 @@ Takes a hashref, mapping Content-Types to a given serializer plugin. This is the 'fall-back' Content-Type if none of the requested or acceptable types is found in the L. It must be an entry in the L. -=head2 stash_key +=head2 stash_key Specifies the key of the stash entry holding the data that is to be serialized. So if the value is "rest", we will serialize the data under: @@ -127,7 +136,7 @@ perhaps for debugging. Daisuke Maki pointed out that early versions of this Action did not play well with others, or generally behave in a way that was very consistent -with the rest of Catalyst. +with the rest of Catalyst. =head1 SEE ALSO