X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FREST.pm;h=45d5b7b27082ec860b901d4ca0bf14a91d7ea604;hb=866dfdfe365a28a20be49ebaca883217122fc353;hp=b6b4378ede329552b29304d35f44cb92fba04fc8;hpb=2474828604a779657c1bfa42b1875951ccd43383;p=catagits%2FCatalyst-Action-Serialize-Data-Serializer.git diff --git a/lib/Catalyst/Controller/REST.pm b/lib/Catalyst/Controller/REST.pm index b6b4378..45d5b7b 100644 --- a/lib/Catalyst/Controller/REST.pm +++ b/lib/Catalyst/Controller/REST.pm @@ -2,7 +2,7 @@ package Catalyst::Controller::REST; use Moose; use namespace::autoclean; -our $VERSION = '0.88'; +our $VERSION = '0.93'; $VERSION = eval $VERSION; =head1 NAME @@ -36,7 +36,9 @@ Catalyst::Controller::REST - A RESTful controller # Answer PUT requests to "thing" sub thing_PUT { - $radiohead = $req->data->{radiohead}; + my ( $self, $c ) = @_; + + $radiohead = $c->req->data->{radiohead}; $self->status_created( $c, @@ -232,6 +234,25 @@ Your views should have a C method like this: return $serialized; } +=item * Callback + +For infinite flexibility, you can provide a callback for the +deserialization/serialization steps. + + __PACKAGE__->config( + map => { + 'text/xml' => [ 'Callback', { deserialize => \&parse_xml, serialize => \&render_xml } ], + } + ); + +The C callback is passed a string that is the body of the +request and is expected to return a scalar value that results from +the deserialization. The C callback is passed the data +structure that needs to be serialized and must return a string suitable +for returning in the HTTP response. In addition to receiving the scalar +to act on, both callbacks are passed the controller object and the context +(i.e. C<$c>) as the second and third arguments. + =back By default, L will return a @@ -401,7 +422,7 @@ sub status_no_content { my $c = shift; $c->response->status(204); $self->_set_entity( $c, undef ); - return 1.; + return 1; } =item status_multiple_choices @@ -592,6 +613,10 @@ action classes: sub serialize : ActionClass('Serialize') {} +If you need to deserialize multipart requests (i.e. REST data in +one part and file uploads in others) you can do so by using the +L action class. + =back =head1 A MILD WARNING