don't load Catalyst::Exception in Utils.pm BEGIN, because some Scripts::* load Utils...
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Utils.pm
index 22675a9..d72441e 100644 (file)
@@ -1,15 +1,14 @@
 package Catalyst::Utils;
 
 use strict;
-use Catalyst::Exception;
 use File::Spec;
 use HTTP::Request;
 use Path::Class;
 use URI;
 use Carp qw/croak/;
 use Cwd;
+
 use String::RewritePrefix;
-use Moose::Util qw/find_meta/;
 
 use namespace::clean;
 
@@ -49,19 +48,6 @@ sub appprefix {
 
 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;
@@ -137,7 +123,7 @@ sub class2prefix {
 Returns a tempdir for a class. If create is true it will try to create the path.
 
     My::App becomes /tmp/my/app
-    My::App::C::Foo::Bar becomes /tmp/my/app/c/foo/bar
+    My::App::Controller::Foo::Bar becomes /tmp/my/app/c/foo/bar
 
 =cut
 
@@ -153,6 +139,13 @@ sub class2tempdir {
         eval { $tmpdir->mkpath };
 
         if ($@) {
+            # don't load Catalyst::Exception as a BEGIN in Utils,
+            # because Utils often gets loaded before MyApp.pm, and if
+            # Catalyst::Exception is loaded before MyApp.pm, it does
+            # not honor setting
+            # $Catalyst::Exception::CATALYST_EXCEPTION_CLASS in
+            # MyApp.pm
+            require Catalyst::Exception;
             Catalyst::Exception->throw(
                 message => qq/Couldn't create tmpdir '$tmpdir', "$@"/ );
         }
@@ -185,8 +178,9 @@ sub home {
             # pop off /lib and /blib if they're there
             $home = $home->parent while $home =~ /b?lib$/;
 
-            # only return the dir if it has a Makefile.PL or Build.PL
-            if (-f $home->file("Makefile.PL") or -f $home->file("Build.PL")) {
+            # only return the dir if it has a Makefile.PL or Build.PL or dist.ini
+            if (-f $home->file("Makefile.PL") or -f $home->file("Build.PL")
+                or -f $home->file("dist.ini")) {
 
                 # clean up relative path:
                 # MyApp/script/.. -> MyApp