Version 1.29
[catagits/Catalyst-Devel.git] / lib / Catalyst / Helper.pm
index 6a052e6..6ff9836 100644 (file)
@@ -13,8 +13,14 @@ use Catalyst::Utils;
 use Catalyst::Exception;
 use Path::Class qw/dir file/;
 use File::ShareDir qw/dist_dir/;
+use YAML::Tiny;
 use namespace::autoclean;
 
+with 'MooseX::Emulate::Class::Accessor::Fast';
+
+# Change Catalyst/Devel.pm also
+our $VERSION = '1.29';
+
 my %cache;
 
 =head1 NAME
@@ -30,7 +36,10 @@ Catalyst::Helper - Bootstrap a Catalyst application
 sub get_sharedir_file {
     my ($self, @filename) = @_;
     my $dist_dir;
-    if (-d "inc/.author" && -f "lib/Catalyst/Helper.pm"
+    if (exists $ENV{CATALYST_DEVEL_SHAREDIR}) {
+        $dist_dir = $ENV{CATALYST_DEVEL_SHAREDIR};
+    }
+    elsif (-d "inc/.author" && -f "lib/Catalyst/Helper.pm"
             ) { # Can't use sharedir if we're in a checkout
                 # this feels horrible, better ideas?
         $dist_dir = 'share';
@@ -70,22 +79,40 @@ sub mk_app {
     # Needs to be here for PAR
     require Catalyst;
 
+    if($name eq '.') {
+        if(!-e 'META.yml') {
+            system perl => 'Makefile.PL'
+                and Catalyst::Exception->throw(message => q(
+                    Failed to run "perl Makefile.PL".
+                ));
+        }
+
+        $name = YAML::Tiny->read('META.yml')->[0]->{'name'};
+        $name =~ s/-/::/g;
+        $self->{dir} = '.';
+    }
+
     if ( $name =~ /[^\w:]/ || $name =~ /^\d/ || $name =~ /\b:\b|:{3,}/) {
         warn "Error: Invalid application name.\n";
         return 0;
     }
+
+
+    if(!defined $self->{'dir'}) {
+        $self->{dir} = $name;
+        $self->{dir} =~ s/\:\:/-/g;
+    }
+
     $self->{name            } = $name;
-    $self->{dir             } = $name;
-    $self->{dir             } =~ s/\:\:/-/g;
     $self->{script          } = dir( $self->{dir}, 'script' );
     $self->{appprefix       } = Catalyst::Utils::appprefix($name);
     $self->{appenv          } = Catalyst::Utils::class2env($name);
     $self->{startperl       } = -r '/usr/bin/env'
                                 ? '#!/usr/bin/env perl'
-                                : "#!$Config{perlpath} -w";
+                                : "#!$Config{perlpath}";
     $self->{scriptgen       } = $Catalyst::Devel::CATALYST_SCRIPT_GEN;
     $self->{catalyst_version} = $Catalyst::VERSION;
-    $self->{author          } = $self->{author} = $ENV{'AUTHOR'}
+    $self->{author          } ||= $ENV{'AUTHOR'}
       || eval { @{ [ getpwuid($<) ] }[6] }
       || 'Catalyst developer';
 
@@ -95,7 +122,8 @@ sub mk_app {
 
     if ($gen_app) {
         for ( qw/ _mk_dirs _mk_config _mk_appclass _mk_rootclass _mk_readme
-              _mk_changes _mk_apptest _mk_images _mk_favicon/ ) {
+              _mk_changes _mk_apptest _mk_podtest _mk_podcoveragetest
+              _mk_images _mk_favicon/ ) {
             
             $self->$_;
         }
@@ -185,17 +213,19 @@ sub mk_component {
                     message => qq/Couldn't load helper "$class", "$@"/ );
             }
 
-            ## must be left for back compat! ###################################
             if ( $class->can('mk_compclass') ) {
                 return 1 unless $class->mk_compclass( $self, @args );
             }
-            else { return 1 unless $self->_mk_compclass }
+            else {
+                return 1 unless $self->_mk_compclass
+            }
 
             if ( $class->can('mk_comptest') ) {
                 $class->mk_comptest( $self, @args );
             }
-            else { $self->_mk_comptest }
-            ####################################################################
+            else {
+                $self->_mk_comptest
+            }
         }
 
         # Fallback
@@ -395,7 +425,17 @@ sub _mk_apptest {
     my $self = shift;
     my $t    = $self->{t};
     $self->render_sharedir_file( file('t', '01app.t.tt'),         file($t, "01app.t") );
+}
+
+sub _mk_podtest {
+    my $self = shift;
+    my $t    = $self->{t};
     $self->render_sharedir_file( file('t', '02pod.t.tt'),         file($t, "02pod.t") );
+}
+
+sub _mk_podcoveragetest {
+    my $self = shift;
+    my $t    = $self->{t};
     $self->render_sharedir_file( file('t', '03podcoverage.t.tt'), file($t, "03podcoverage.t") );
 }