are coercions feasable at all?
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Action.pm
index 274ffd9..913e0de 100644 (file)
@@ -140,7 +140,6 @@ sub execute {
 
 sub match {
     my ( $self, $c ) = @_;
-    $c->log->debug($self->reverse);
 
     # If infinite args, we always match
     return 1 if $self->normalized_arg_number == ~0;
@@ -152,9 +151,14 @@ sub match {
       # That means we expect a reference, so use the full args arrayref.
       if(
         $self->number_of_args_constraints == 1 &&
-        $self->args_constraints->[0]->is_a_type_of('Ref')
+        ($self->args_constraints->[0]->is_a_type_of('Ref') || $self->args_constraints->[0]->is_a_type_of('ClassName'))
       ) {
-        return $self->args_constraints->[0]->check($c->req->args);
+        return 1 if $self->args_constraints->[0]->check($c->req->args);
+        if($self->args_constraints->[0]->coercion && $self->attributes->{Coerce}) {
+          my $coerced = $self->args_constraints->[0]->coerce($c) || return 0;
+          $c->req->args([$coerced]);
+          return 1;
+        }
       } else {
         for my $i(0..$#{ $c->req->args }) {
           $self->args_constraints->[$i]->check($c->req->args->[$i]) || return 0;
@@ -239,6 +243,9 @@ of the captures for this action.
 Returning true from this method causes the chain match to continue, returning
 makes the chain not match (and alternate, less preferred chains will be attempted).
 
+=head2 resolve_type_constraint
+
+Trys to find a type constraint if you have on on a type constrained method.
 
 =head2 compare