new action class to handle deserializing multi-part HTTP request data
[catagits/Catalyst-Action-REST.git] / lib / Catalyst / Controller / REST.pm
index 87bb7aa..defe764 100644 (file)
@@ -2,7 +2,7 @@ package Catalyst::Controller::REST;
 use Moose;
 use namespace::autoclean;
 
-our $VERSION = '0.87';
+our $VERSION = '0.91';
 $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,
@@ -401,7 +403,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
@@ -565,28 +567,37 @@ L<Catalyst::Action::Serialize>.
 The C<begin> method uses L<Catalyst::Action::Deserialize>.  The C<end>
 method uses L<Catalyst::Action::Serialize>.  If you want to override
 either behavior, simply implement your own C<begin> and C<end> actions
-and use MRO::Compat:
+and forward to another action with the Serialize and/or Deserialize
+action classes:
 
   package Foo::Controller::Monkey;
   use Moose;
   use namespace::autoclean;
-  
+
   BEGIN { extends 'Catalyst::Controller::REST' }
 
-  sub begin :Private {
+  sub begin : Private {
     my ($self, $c) = @_;
     ... do things before Deserializing ...
-    $self->maybe::next::method($c);
+    $c->forward('deserialize');
     ... do things after Deserializing ...
   }
 
+  sub deserialize : ActionClass('Deserialize') {}
+
   sub end :Private {
     my ($self, $c) = @_;
     ... do things before Serializing ...
-    $self->maybe::next::method($c);
+    $c->forward('serialize');
     ... do things after Serializing ...
   }
 
+  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<Catalyst::Action::DeserializeMultiPart> action class.
+
 =back
 
 =head1 A MILD WARNING
@@ -618,4 +629,6 @@ You may distribute this code under the same terms as Perl itself.
 
 =cut
 
+__PACKAGE__->meta->make_immutable;
+
 1;