[Catalyst-commits] r10897 - in Catalyst-Runtime/5.80/trunk: . lib/Catalyst

t0m at dev.catalyst.perl.org t0m at dev.catalyst.perl.org
Thu Jul 16 21:05:25 GMT 2009


Author: t0m
Date: 2009-07-16 21:05:25 +0000 (Thu, 16 Jul 2009)
New Revision: 10897

Modified:
   Catalyst-Runtime/5.80/trunk/Changes
   Catalyst-Runtime/5.80/trunk/lib/Catalyst/Utils.pm
Log:
Special move for CX::Component::Traits. No tests, please don't look.

Modified: Catalyst-Runtime/5.80/trunk/Changes
===================================================================
--- Catalyst-Runtime/5.80/trunk/Changes	2009-07-16 17:41:59 UTC (rev 10896)
+++ Catalyst-Runtime/5.80/trunk/Changes	2009-07-16 21:05:25 UTC (rev 10897)
@@ -10,6 +10,8 @@
        - Deleted the Restarter engine and its Watcher code. Use the
          new Catalyst::Restarter in a recent Catalyst::Devel instead.
        - New unit test for Catalyst::Action 'unit_core_action.t' (groditi)
+       - Components being anonymous classes at runtime is now correctly dealt with
+         by class2appclass to support CatalystX::Component::Traits
 
   New features:
        - private_path method for Catalyst::Action + docs + tests (groditi)

Modified: Catalyst-Runtime/5.80/trunk/lib/Catalyst/Utils.pm
===================================================================
--- Catalyst-Runtime/5.80/trunk/lib/Catalyst/Utils.pm	2009-07-16 17:41:59 UTC (rev 10896)
+++ Catalyst-Runtime/5.80/trunk/lib/Catalyst/Utils.pm	2009-07-16 21:05:25 UTC (rev 10897)
@@ -8,8 +8,8 @@
 use URI;
 use Carp qw/croak/;
 use Cwd;
-
 use String::RewritePrefix;
+use Moose::Util qw/find_meta/;
 
 use namespace::clean;
 
@@ -49,6 +49,19 @@
 
 sub class2appclass {
     my $class = shift || '';
+
+    # Special move to deal with components which are anon classes.
+    # Specifically, CX::Component::Traits c072fb2
+    my $meta = find_meta($class);
+    if ($meta) {
+        while ($meta->is_anon_class) {
+            my @superclasses = $meta->superclasses;
+            return if scalar(@superclasses) > 1; # Fail silently, MI, can't deal..
+            $class = $superclasses[0];
+            $meta = find_meta($class);
+        }
+    }
+
     my $appname = '';
     if ( $class =~ /^(.+?)::([MVC]|Model|View|Controller)::.+$/ ) {
         $appname = $1;




More information about the Catalyst-commits mailing list