debug version
John Napiorkowski [Fri, 4 Sep 2015 18:29:44 +0000 (13:29 -0500)]
lib/Catalyst/Action.pm

index d5f1502..257feb5 100644 (file)
@@ -260,27 +260,36 @@ sub resolve_type_constraint {
     # and superclasses, look for attributes and figure it out.
     # Superclasses take precedence;
     #
-    my @supers = map { $_->meta } $self->class->meta->superclasses;
-    my @roles = $self->class->meta->calculate_all_roles;
+    my @supers = $self->class->can('meta') ? map { $_->meta } $self->class->meta->superclasses : ();
+    my @roles = $self->class->can('meta') ? $self->class->meta->calculate_all_roles : ();
 
     # So look thru all the super and roles in order and return the
     # first type constraint found. We should probably find all matching
     # type constraints and try to do some sort of resolution.
+    
+    warn "--> Hunting for TC $name in controller hierarchy\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG};
 
     foreach my $parent (@roles, @supers) {
+      warn "    Looking for TC $name in ${\$parent->name}\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG};
       if(my $m = $parent->get_method($self->name)) {
         if($m->can('attributes')) {
+          warn "      method $m has attributes\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG};
           my ($key, $value) = map { $_ =~ /^(.*?)(?:\(\s*(.+?)\s*\))?$/ }
             grep { $_=~/^Args\(/ or $_=~/^CaptureArgs\(/ }
               @{$m->attributes};
+          warn "      about to evaluate any found attrs\n"  if $ENV{CATALYST_CONSTRAINTS_DEBUG};
           next unless $value eq $name;
+          warn "      found attr info $key and $value\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG};
           my @tc = eval "package ${\$parent->name}; $name";
-          return @tc if @tc;
+          return @tc if scalar(@tc);
+        } else {
+          warn "    method $m does not have method attributes\n" if $ENV{CATALYST_CONSTRAINTS_DEBUG};
         }
       }
     }
-
-    die "'$name' not a type constraint in ${\$self->private_path}";
+    
+    my $classes = join(',', $self->class, @roles, @supers);
+    die "'$name' not a type constraint in '${\$self->private_path}', Looked in: $classes";
   };
 
   if($tc[0]) {