[Catalyst] Error in subclassing Catalyst::Controller::DBIC::API::REST

Amiri Barksdale amiribarksdale at gmail.com
Wed Jun 24 00:39:34 GMT 2009


I have a controller inheriting from a ControllerBase class that contains
the following:

   package RestTest::ControllerBase::REST;

   use strict;
   use warnings;
   use base qw/Catalyst::Controller::DBIC::API::REST/;

   sub create :Private {
   my ($self, $c) = @_;
   $self->next::method($c);
       if ($c->stash->{created_object}) {    
           %{$c->stash->{response}->{new_object}} =
           %$c->stash->{created_object}->get_columns;
       }
   }

   1;


All the ControllerBase does is stash that object on create requests. I
was following lukes's example at
http://search.cpan.org/~lsaunders/Catalyst-Controller-DBIC-API-1.003000/lib/Catalyst/Controller/DBIC/API.pm#EXTENDING.
The relevant part of the controller is:


   package RestTest::Controller::API::REST::Artist;

   use strict;
   use warnings;
   use base qw/RestTest::ControllerBase::REST/;
   use JSON::Syck;

   __PACKAGE__->config(
       action                  =>  { setup => { PathPart => 'artist',
   Chained => '/api/rest/rest_base' } },
   ...
   );


Now for the problem. When I go to test this:

   my $mech = Test::WWW::Mechanize::Catalyst->new;
   ok(my $schema = DBICTest->init_schema(), 'got schema');

     my $req = GET("http://localhost/api/rest/artist/list", {
     }, 'Accept' => 'text/x-json' );
     $mech->request($req);
     cmp_ok( $mech->status, '==', 200, 'open attempt okay' );


I get the error:

   'Method GET not implemented for http' =>
   '//localhost/api/rest/artist/api/rest/artist/object'

Somehow my request path gets all messed up. I dumped out the $mech, and it tells
me that $mech->base is indeed what I put. So is $mech->redirected_uri.



Amiri



More information about the Catalyst mailing list