Merge branch 'master' of git://github.com/bobtfish/catalyst-action-rest
Arthur Axel 'fREW' Schmidt [Sat, 25 Jul 2009 10:07:40 +0000 (05:07 -0500)]
Conflicts:
lib/Catalyst/Action/REST.pm

1  2 
lib/Catalyst/Action/REST.pm

@@@ -90,33 -89,37 +89,39 @@@ sub dispatch 
      my $c    = shift;
  
      my $controller = $c->component( $self->class );
-     my $method     = $self->name . "_" . uc( $c->request->method );
-     if ( my $action = $controller->action_for($method) ) {
+     my $rest_method = $self->name . "_" . uc( $c->request->method );
+     my ($code, $name);
+     # Common case, for foo_GET etc
 -    if ($code = $controller->can($rest_method)) {
++    if ( my $action = $controller->action_for($rest_method) ) {
 +        return $c->forward( $action,  $c->req->args );
-     } elsif ( $controller->can($method) ) {
++     } elsif ($code = $controller->can($rest_method)) {
+         # Exceute normal action
          $c->execute( $self->class, $self, @{ $c->req->args } );
-         return $controller->$method( $c, @{ $c->req->args } );
-     } else {
-         if ( $c->request->method eq "OPTIONS" ) {
-             return $self->_return_options($c);
-         } else {
-             my $handle_ni = $self->name . "_not_implemented";
-             if ( $controller->can($handle_ni) ) {
-                 return $controller->$handle_ni( $c, @{ $c->req->args } );
-             } else {
-                 return $self->_return_not_implemented($c);
-             }
-         }
+         $name = $rest_method;
      }
- }
  
- sub _return_options {
-     my ( $self, $c ) = @_;
+     # Generic handling for foo_OPTIONS
+     if (!$code && $c->request->method eq "OPTIONS") {
+         $name = $rest_method;
+         $code = sub { $self->_return_options($self->name, @_) };
+     }
  
-     my @allowed = $self->_get_allowed_methods($c);
-     $c->response->content_type('text/plain');
-     $c->response->status(200);
-     $c->response->header( 'Allow' => \@allowed );
+     # Otherwise, not implemented.
+     if (!$code) {
+         $name = $self->name . "_not_implemented";
+         $code = $controller->can($name) # User method
+             # Generic not implemented
+             || sub { $self->_return_not_implemented($self->name, @_) };
+     }
+     # localise stuff so we can dispatch the action 'as normal, but get
+     # different stats shown, and different code run.
+     local $self->{code} = $code;
+     local $self->{reverse} = $name;
+     $c->execute( $self->class, $self, @{ $c->req->args } );
  }
  
  sub _get_allowed_methods {
@@@ -164,23 -173,16 +175,30 @@@ L<Catalyst::Action::Serialize>, L<Catal
  
  =item Q: I'm getting a "415 Unsupported Media Type" error. What gives?!
  
++<<<<<<< HEAD:lib/Catalyst/Action/REST.pm
 +A:  Most likely, you haven't set Content-type equal to "application/json", or one of the
 +accepted return formats.  You can do this by setting it in your query string thusly:
 +?content-type=application%2Fjson (where %2F == / uri escaped).
 +
 +**NOTE** Apache will refuse %2F unless configured otherise.
 +Make sure AllowEncodedSlashes On is in your httpd.conf file in order for this to run smoothly.
 +
 +=cut
 +
 +=cut
 +
++=======
+ A:  Most likely, you haven't set Content-type equal to "application/json", or
+ one of the accepted return formats.  You can do this by setting it in your query
+ accepted return formats.  You can do this by setting it in your query string
+ thusly: C<< ?content-type=application%2Fjson (where %2F == / uri escaped). >>
++>>>>>>> f04ed654a172628f642bdefe8483c1e6becf9ad1:lib/Catalyst/Action/REST.pm
  
+ B<NOTE> Apache will refuse %2F unless configured otherise.
+ Make sure C<< AllowEncodedSlashes On >> is in your httpd.conf file in orde
+ for this to run smoothly.
  
- =head1 MAINTAINER
- J. Shirley <jshirley@gmail.com>
+ =back
  
  =head1 CONTRIBUTORS