X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FHelper.pm;h=0710cd7f20af4ed311ef30d108cb36421dd2f0f6;hb=e62ab07578a0433bdd4be9dd55a5cd6221973a70;hp=86ba60f7e2de03a4effc222ace20d3561a2893a1;hpb=9385890d6bcf864ba9c7be8d913e7a7d497d7ee8;p=catagits%2FCatalyst-Devel.git diff --git a/lib/Catalyst/Helper.pm b/lib/Catalyst/Helper.pm index 86ba60f..0710cd7 100644 --- a/lib/Catalyst/Helper.pm +++ b/lib/Catalyst/Helper.pm @@ -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.31'; 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'; @@ -111,9 +121,9 @@ sub mk_app { my $gen_app = ( $self->{scripts} || $self->{makefile} ) ? 0 : 1; if ($gen_app) { - for ( qw/ _mk_dirs _mk_config _mk_appclass _mk_rootclass _mk_readme - _mk_changes _mk_apptest _mk_images _mk_favicon/ ) { - + for ( qw/ _mk_dirs _mk_config _mk_psgi _mk_appclass _mk_rootclass + _mk_readme _mk_changes _mk_apptest _mk_podtest _mk_podcoveragetest + _mk_images _mk_favicon/ ) { $self->$_; } } @@ -121,7 +131,7 @@ sub mk_app { $self->_mk_makefile; } if ($gen_scripts) { - for ( qw/ _mk_cgi _mk_fastcgi _mk_server + for ( qw/ _mk_cgi _mk_fastcgi _mk_server _mk_test _mk_create _mk_information / ) { $self->$_; @@ -130,7 +140,7 @@ sub mk_app { return $self->{dir}; } -## not much of this can really be changed, mk_compclass must be left for +## not much of this can really be changed, mk_compclass must be left for ## backcompat sub mk_component { my $self = shift; @@ -389,6 +399,14 @@ sub _mk_makefile { } } +sub _mk_psgi { + my $self = shift; + my $dir = $self->{dir}; + my $appprefix = $self->{appprefix}; + $self->render_sharedir_file( 'myapp.psgi.tt', + file( $dir, "$appprefix.psgi" ) ); +} + sub _mk_config { my $self = shift; my $dir = $self->{dir}; @@ -414,7 +432,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") ); }