return \@args;
} else {
@args =
- map { Moose::Util::TypeConstraints::find_or_parse_type_constraint($_) || die "$_ is not a constraint!" }
+ map { $self->resolve_type_constraint($_) || die "$_ is not a constraint!" }
@arg_protos;
}
return \@args;
}
+sub resolve_type_constraint {
+ my ($self, $name) = @_;
+ my $tc = eval "package ${\$self->class}; $name" || undef;
+ return $tc || Moose::Util::TypeConstraints::find_or_parse_type_constraint($name);
+}
+
use overload (
# Stringify to reverse for debug output etc.
use warnings;
use strict;
-use Test::More;
-use HTTP::Request::Common;
+
+BEGIN {
+ use Test::More;
+ eval "use Types::Standard; 1;" || do {
+ plan skip_all => "Trouble loading Types::Standard => $@";
+ };
+}
{
package MyApp::Controller::Root;
use Moose;
use MooseX::MethodAttributes;
+ use Types::Standard qw/Tuple Int Str/;
extends 'Catalyst::Controller';
$c->res->body('many_ints');
}
+ sub tuple :Local Args(Tuple[Str,Int]) {
+ my ($self, $c, $int) = @_;
+ $c->res->body('tuple');
+ }
+
+
sub any_priority :Path('priority_test') Args(1) { $_[1]->res->body('any_priority') }
+
sub int_priority :Path('priority_test') Args(Int) { $_[1]->res->body('int_priority') }
sub default :Default {
my $res = request '/priority_test/1';
is $res->content, 'int_priority';
}
+
{
my $res = request '/priority_test/a';
is $res->content, 'any_priority';
}
+{
+ my $res = request '/tuple/aaa/111';
+ is $res->content, 'tuple';
+}
+
+{
+ my $res = request '/tuple/aaa/aaa';
+ is $res->content, 'default';
+}
+
done_testing;