Version 1.29
[catagits/Catalyst-Devel.git] / lib / Catalyst / Helper.pm
index 86ba60f..6ff9836 100644 (file)
@@ -13,12 +13,13 @@ 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.23';
+our $VERSION = '1.29';
 
 my %cache;
 
@@ -34,28 +35,19 @@ Catalyst::Helper - Bootstrap a Catalyst application
 
 sub get_sharedir_file {
     my ($self, @filename) = @_;
-
-    my @try_dirs;
-    if (exists $self->{base}) {
-        push @try_dirs, $self->{base};
-    }
+    my $dist_dir;
     if (exists $ENV{CATALYST_DEVEL_SHAREDIR}) {
-        push @try_dirs, $ENV{CATALYST_DEVEL_SHAREDIR}
+        $dist_dir = $ENV{CATALYST_DEVEL_SHAREDIR};
     }
-    if (-d "inc/.author" && -f "lib/Catalyst/Helper.pm"
+    elsif (-d "inc/.author" && -f "lib/Catalyst/Helper.pm"
             ) { # Can't use sharedir if we're in a checkout
                 # this feels horrible, better ideas?
-        push @try_dirs, 'share';
+        $dist_dir = 'share';
     }
     else {
-        push @try_dirs, dist_dir('Catalyst-Devel');
-    }
-
-    my $file;
-    foreach my $dist_dir (@try_dirs) {
-      $file = file( $dist_dir, @filename);
-      last if -r $file;
+        $dist_dir = dist_dir('Catalyst-Devel');
     }
+    my $file = file( $dist_dir, @filename);
     Carp::confess("Cannot find $file") unless -r $file;
     my $contents = $file->slurp;
     return $contents;
@@ -87,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';
 
@@ -112,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->$_;
         }
@@ -414,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") );
 }