apply RequestRole::REST instead of doing Request::REST->_insert_self_info
Hans Dieter Pearcey [Tue, 14 Apr 2009 04:40:05 +0000 (00:40 -0400)]
lib/Catalyst/Action/REST.pm
lib/Catalyst/Action/SerializeBase.pm
t/catalyst-request-rest.t

index b9e84cf..ee79592 100644 (file)
@@ -12,21 +12,16 @@ use warnings;
 
 use base 'Catalyst::Action';
 use Class::Inspector;
+use Moose::Util qw(does_role);
 use Catalyst;
-use Catalyst::Request::REST;
+use Catalyst::RequestRole::REST;
 use Catalyst::Controller::REST;
+use namespace::clean -except => 'meta';
 
 BEGIN { require 5.008001; }
 
 our $VERSION = '0.71';
 
-sub new {
-  my $class  = shift;
-  my $config = shift;
-  Catalyst::Request::REST->_insert_self_into( $config->{class} );
-  return $class->SUPER::new($config, @_);
-}
-
 =head1 NAME
 
 Catalyst::Action::REST - Automated REST Method Dispatching
@@ -89,6 +84,9 @@ sub dispatch {
     my $self = shift;
     my $c    = shift;
 
+    Catalyst::RequestRole::REST->meta->apply($c->request)
+        unless does_role($c->request, 'Catalyst::RequestRole::REST');
+
     my $controller = $c->component( $self->class );
     my $method     = $self->name . "_" . uc( $c->request->method );
     if ( $controller->can($method) ) {
index 83ec265..4e8829e 100644 (file)
@@ -13,22 +13,18 @@ use base 'Catalyst::Action';
 use Moose::Util qw(does_role);
 use Catalyst::ControllerRole::SerializeConfig;
 use Module::Pluggable::Object;
-use Catalyst::Request::REST;
+use Catalyst::RequestRole::REST;
 use Catalyst::Utils ();
 
-sub new {
-  my $class  = shift;
-  my $config = shift;
-  Catalyst::Request::REST->_insert_self_into( $config->{class} );
-  return $class->SUPER::new($config, @_);
-}
-
 __PACKAGE__->mk_accessors(qw(_serialize_plugins _loaded_plugins));
 
 sub _load_content_plugins {
     my $self = shift;
     my ( $search_path, $controller, $c ) = @_;
 
+    Catalyst::RequestRole::REST->meta->apply($c->request)
+      unless does_role($c->request, 'Catalyst::RequestRole::REST');
+
     unless ( defined( $self->_loaded_plugins ) ) {
         $self->_loaded_plugins( {} );
     }
index ac49e29..82687d2 100644 (file)
@@ -1,6 +1,6 @@
 use strict;
 use warnings;
-use Test::More tests => 28;
+use Test::More tests => 26;
 use FindBin;
 use lib ( "$FindBin::Bin/../lib", "$FindBin::Bin/../t/lib" );
 
@@ -170,20 +170,8 @@ use HTTP::Headers;
 {
   my $test = 'Test::Catalyst::Action::REST';
   use_ok $test;
-  is($test->request_class, 'Catalyst::Request::REST',
-    'Request::REST took over for Request');
-
-  $test->request_class('Some::Other::Class');
-  eval { $test->setup_finished(0); $test->setup };
-  like $@, qr/$test has a custom request class Some::Other::Class/;
-
-  {
-    package My::Request;
-    use base 'Catalyst::Request::REST';
-  }
-  $test->request_class('My::Request');
-  eval { $test->setup_finished(0); $test->setup };
-  is $@, '', 'no error from Request::REST subclass';
+  is($test->request_class, 'Catalyst::Request',
+    'Request::REST did not take over for Request');
 }
 
 package MockContext;