name 'Catalyst-Action-REST';
all_from 'lib/Catalyst/Action/REST.pm';
-requires('Catalyst::Runtime' => '5.7001');
+requires 'Moose';
+requires 'namespace::autoclean';
+requires('Catalyst::Runtime' => '5.80');
requires('Params::Validate' => '0.76');
requires('YAML::Syck' => '0.67');
requires('Module::Pluggable::Object' => undef);
requires('URI::Find' => undef);
requires('MRO::Compat' => '0.10');
-requires 'Moose';
requires 'namespace::autoclean';
+test_requires 'Test::More' => '0.88';
feature 'JSON (application/json) support',
-default => 0,
my $req_class = $app->request_class;
return if $req_class->isa($class);
+ my $req_class_meta = Moose->init_meta( for_class => $req_class );
+ return if $req_class_meta->does_role('Catalyst::TraitFor::Request::REST');
if ($req_class eq 'Catalyst::Request') {
$app->request_class($class);
- } else {
- die "$app has a custom request class $req_class, "
- . "which is not a $class; see Catalyst::Request::REST";
+ }
+ else {
+ my $meta = Moose::Meta::Class->create_anon_class(
+ superclasses => [$req_class],
+ roles => ['Catalyst::TraitFor::Request::REST'],
+ cache => 1
+ );
+ $meta->add_method(meta => sub { $meta });
+ $app->request_class($meta->name);
}
}
use strict;
use warnings;
-use Test::More tests => 28;
+use Test::More;
use FindBin;
use lib ( "$FindBin::Bin/../lib", "$FindBin::Bin/../t/lib" );
is($test->request_class, 'Catalyst::Request::REST',
'Request::REST took over for Request');
- $test->request_class('Some::Other::Class');
+ my $meta = Moose::Meta::Class->create_anon_class(
+ superclasses => ['Catalyst::Request'],
+ );
+ $meta->add_method('__random_method' => sub { 42 });
+
+ $test->request_class($meta->name);
+ # FIXME - setup_finished(0) is evil!
eval { $test->setup_finished(0); $test->setup };
- like $@, qr/$test has a custom request class Some::Other::Class/;
+ ok !$@, 'Can setup again';
+ isnt $test->request_class, $meta->name, 'Different request class';
+ ok $test->request_class->can('__random_method'), 'Is right class';
+ ok $test->request_class->can('data'), 'Also smells like REST subclass';
{
package My::Request;
is $@, '', 'no error from Request::REST subclass';
}
+done_testing;
+
package MockContext;
sub prepare_body { }