X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Action-REST.git;a=blobdiff_plain;f=lib%2FCatalyst%2FAction%2FDeserialize.pm;h=ead726dd645c7e3a6c7bd0656bc86f3886e922af;hp=653a93f44efacbf31ded62662bd778829f5ac406;hb=3bb36dcaabf34fef5c15b1bb74c5eb198a7f5168;hpb=e601addaf89882fccbc824c1a53328f0d049b32b diff --git a/lib/Catalyst/Action/Deserialize.pm b/lib/Catalyst/Action/Deserialize.pm index 653a93f..ead726d 100644 --- a/lib/Catalyst/Action/Deserialize.pm +++ b/lib/Catalyst/Action/Deserialize.pm @@ -1,50 +1,48 @@ -# -# Catlyst::Action::Deserialize -# Created by: Adam Jacob, Marchex, -# -# $Id$ - package Catalyst::Action::Deserialize; -use strict; -use warnings; +use Moose; +use namespace::autoclean; -use base 'Catalyst::Action::SerializeBase'; +extends 'Catalyst::Action::SerializeBase'; use Module::Pluggable::Object; -use Catalyst::Request::REST; +use MRO::Compat; + +our $VERSION = '0.82'; +$VERSION = eval $VERSION; -__PACKAGE__->mk_accessors(qw(plugins)); +has plugins => ( is => 'rw' ); sub execute { my $self = shift; my ( $controller, $c ) = @_; - my $nreq = bless( $c->request, 'Catalyst::Request::REST' ); - $c->request($nreq); - my @demethods = qw(POST PUT OPTIONS); my $method = $c->request->method; if ( grep /^$method$/, @demethods ) { - my ($sclass, $sarg, $content_type) = $self->_load_content_plugins('Catalyst::Action::Deserialize', $controller, $c); - return 1 unless defined ($sclass); + my ( $sclass, $sarg, $content_type ) = + $self->_load_content_plugins( 'Catalyst::Action::Deserialize', + $controller, $c ); + return 1 unless defined($sclass); my $rc; if ( defined($sarg) ) { $rc = $sclass->execute( $controller, $c, $sarg ); } else { $rc = $sclass->execute( $controller, $c ); } - if ($rc eq "0") { - return $self->_unsupported_media_type($c, $content_type); - } elsif ($rc ne "1") { - return $self->_serialize_bad_request($c, $content_type, $rc); + if ( $rc eq "0" ) { + return $self->_unsupported_media_type( $c, $content_type ); + } elsif ( $rc ne "1" ) { + return $self->_serialize_bad_request( $c, $content_type, $rc ); } - } + } - $self->NEXT::execute( @_ ); + $self->maybe::next::method(@_); return 1; } +__PACKAGE__->meta->make_immutable; + =head1 NAME Catalyst::Action::Deserialize - Deserialize Data in a Request @@ -54,14 +52,12 @@ Catalyst::Action::Deserialize - Deserialize Data in a Request package Foo::Controller::Bar; __PACKAGE__->config( - serialize => { - 'default' => 'YAML', - 'stash_key' => 'rest', - 'map' => { - 'text/x-yaml' => 'YAML', - 'text/x-data-dumper' => [ 'Data::Serializer', 'Data::Dumper' ], - }, - } + 'default' => 'text/x-yaml', + 'stash_key' => 'rest', + 'map' => { + 'text/x-yaml' => 'YAML', + 'text/x-data-dumper' => [ 'Data::Serializer', 'Data::Dumper' ], + }, ); sub begin :ActionClass('Deserialize') {} @@ -73,9 +69,6 @@ It assumes that the body of the HTTP Request is a serialized object. The serializer is selected by introspecting the requests content-type header. -It requires that your Catalyst controller have a "serialize" entry -in it's configuration. See L for the details. - The specifics of deserializing each content-type is implemented as a plugin to L. You can see a list of currently implemented plugins in L. @@ -91,6 +84,9 @@ single routine: Will work just fine. +When you use this module, the request class will be changed to +L. + =head1 SEE ALSO You likely want to look at L, which implements @@ -98,16 +94,12 @@ a sensible set of defaults for a controller doing REST. L, L -=head1 AUTHOR +=head1 AUTHORS -Adam Jacob , with lots of help from mst and jrockway - -Marchex, Inc. paid me while I developed this module. (http://www.marchex.com) +See L for authors. =head1 LICENSE You may distribute this code under the same terms as Perl itself. =cut - -1;