X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FHelper.pm;h=8e7d07e28ed5c25bdccc6fc4c5f16750f65c6f1f;hp=ee6f6f9a5315fec8fb170baec723e0a739327128;hb=444821f71bffea29e47b01718fe76e54e8f4a860;hpb=b160463fabb0b2c1d0914427e2265ee8152efb46 diff --git a/lib/Catalyst/Helper.pm b/lib/Catalyst/Helper.pm index ee6f6f9..8e7d07e 100644 --- a/lib/Catalyst/Helper.pm +++ b/lib/Catalyst/Helper.pm @@ -8,7 +8,7 @@ use File::Path; use IO::File; use FindBin; use Template; -our $CATALYST_SCRIPT_GEN = 2; +use Catalyst; my %cache; @@ -60,16 +60,22 @@ sub mk_app { $self->{name} = $name; $self->{dir} = $name; $self->{dir} =~ s/\:\:/-/g; + $self->{appprefix} = lc $self->{dir}; + $self->{appprefix} =~ s/-/_/g; $self->{startperl} = $Config{startperl}; - $self->{scriptgen}=$CATALYST_SCRIPT_GEN; + $self->{scriptgen} = $Catalyst::CATALYST_SCRIPT_GEN; + $self->{author} = $self->{author} = $ENV{'AUTHOR'} + || eval { @{ [ getpwuid($<) ] }[6] } + || 'A clever guy'; $self->_mk_dirs; $self->_mk_appclass; + $self->_mk_build; $self->_mk_makefile; $self->_mk_readme; $self->_mk_changes; $self->_mk_apptest; $self->_mk_cgi; - $self->_mk_fcgi; + $self->_mk_fastcgi; $self->_mk_server; $self->_mk_test; $self->_mk_create; @@ -87,6 +93,9 @@ sub mk_component { my $self = shift; my $app = shift; $self->{app} = $app; + $self->{author} = $self->{author} = $ENV{'AUTHOR'} + || eval { @{ [ getpwuid($<) ] }[6] } + || 'A clever guy'; $self->{base} = File::Spec->catdir( $FindBin::Bin, '..' ); unless ( $_[0] =~ /^model|m|view|v|controller|c\$/i ) { my $helper = shift; @@ -100,7 +109,7 @@ sub mk_component { } else { my $type = shift; - my $name = shift; + my $name = shift || "Missing name for model/view/controller"; my $helper = shift; my @args = @_; return 0 if $name =~ /[^\w\:]/; @@ -266,6 +275,12 @@ sub _mk_appclass { $self->render_file( 'appclass', "$mod.pm" ); } +sub _mk_build { + my $self = shift; + my $dir = $self->{dir}; + $self->render_file( 'build', "$dir\/Build.PL" ); +} + sub _mk_makefile { my $self = shift; my $dir = $self->{dir}; @@ -294,38 +309,43 @@ sub _mk_apptest { } sub _mk_cgi { - my $self = shift; - my $script = $self->{script}; - $self->render_file( 'cgi', "$script\/cgi.pl" ); - chmod 0700, "$script/cgi.pl"; + my $self = shift; + my $script = $self->{script}; + my $appprefix = $self->{appprefix}; + $self->render_file( 'cgi', "$script\/$appprefix\_cgi.pl" ); + chmod 0700, "$script/$appprefix\_cgi.pl"; } -sub _mk_fcgi { - my $self = shift; - my $script = $self->{script}; - $self->render_file( 'fcgi', "$script\/fcgi.pl" ); - chmod 0700, "$script/fcgi.pl"; +sub _mk_fastcgi { + my $self = shift; + my $script = $self->{script}; + my $appprefix = $self->{appprefix}; + $self->render_file( 'fastcgi', "$script\/$appprefix\_fastcgi.pl" ); + chmod 0700, "$script/$appprefix\_fastcgi.pl"; } sub _mk_server { - my $self = shift; - my $script = $self->{script}; - $self->render_file( 'server', "$script\/server.pl" ); - chmod 0700, "$script/server.pl"; + my $self = shift; + my $script = $self->{script}; + my $appprefix = $self->{appprefix}; + $self->render_file( 'server', "$script\/$appprefix\_server.pl" ); + chmod 0700, "$script/$appprefix\_server.pl"; } sub _mk_test { - my $self = shift; - my $script = $self->{script}; - $self->render_file( 'test', "$script/test.pl" ); - chmod 0700, "$script/test.pl"; + my $self = shift; + my $script = $self->{script}; + my $appprefix = $self->{appprefix}; + $self->render_file( 'test', "$script/$appprefix\_test.pl" ); + chmod 0700, "$script/$appprefix\_test.pl"; } sub _mk_create { - my $self = shift; - my $script = $self->{script}; - $self->render_file( 'create', "$script\/create.pl" ); - chmod 0700, "$script/create.pl"; + my $self = shift; + my $script = $self->{script}; + my $appprefix = $self->{appprefix}; + $self->render_file( 'create', "$script\/$appprefix\_create.pl" ); + chmod 0700, "$script/$appprefix\_create.pl"; } sub _mk_compclass { @@ -360,6 +380,11 @@ All helper classes should be under one of the following namespaces. Catalyst::Helper::View:: Catalyst::Helper::Controller:: +=head1 NOTE + +The helpers will read author name from /etc/passwd by default. +To override, please export the AUTHOR variable. + =head1 SEE ALSO L, L, L, @@ -387,33 +412,40 @@ use Catalyst qw/-Debug/; our $VERSION = '0.01'; -[% name %]->config( - name => '[% name %]', - root => '[% base %]/root', -); +[% name %]->config( name => '[% name %]' ); [% name %]->setup; -sub default : Private { - my ( $self, $c ) = @_; - $c->res->output('Congratulations, [% name %] is on Catalyst!'); -} - =head1 NAME -[% name %] - A very nice application +[% name %] - Catalyst based application =head1 SYNOPSIS - Very simple to use + script/[% appprefix %]_server.pl =head1 DESCRIPTION -Very nice application. +Catalyst based application. + +=head1 METHODS + +=over 4 + +=item default + +=cut + +sub default : Private { + my ( $self, $c ) = @_; + $c->res->output('Congratulations, [% name %] is on Catalyst!'); +} + +=back =head1 AUTHOR -Clever guy +[%author%] =head1 LICENSE @@ -423,32 +455,61 @@ it under the same terms as perl itself. =cut 1; - __makefile__ -use ExtUtils::MakeMaker; + unless ( eval "use Module::Build::Compat 0.02; 1" ) { + print "This module requires Module::Build to install itself.\n"; -WriteMakefile( - NAME => '[% name %]', - VERSION_FROM => 'lib/[% class %].pm', - PREREQ_PM => { Catalyst => 5 }, - test => { TESTS => join ' ', ( glob('t/*.t'), glob('t/*/*.t') ) } -); + require ExtUtils::MakeMaker; + my $yn = + ExtUtils::MakeMaker::prompt( ' Install Module::Build now from CPAN?', 'y' ); -__readme__ -Run script/server.pl to test the application. + unless ( $yn =~ /^y/i ) { + die " *** Cannot install without Module::Build. Exiting ...\n"; + } -__changes__ -This file documents the revision history for Perl extension $name. + require Cwd; + require File::Spec; + require CPAN; + # Save this 'cause CPAN will chdir all over the place. + my $cwd = Cwd::cwd(); + my $makefile = File::Spec->rel2abs($0); + + CPAN::Shell->install('Module::Build::Compat') + or die " *** Cannot install without Module::Build. Exiting ...\n"; + + chdir $cwd or die "Cannot chdir() back to $cwd: $!"; + } + eval "use Module::Build::Compat 0.02; 1" or die $@; + use lib '_build/lib'; + Module::Build::Compat->run_build_pl( args => \@ARGV ); + require Module::Build; + Module::Build::Compat->write_makefile( build_class => 'Module::Build' ); +__build__ +use strict; +use Catalyst::Build; + +my $build = Catalyst::Build->new( + create_makefile_pl => 'passthrough', + license => 'perl', + module_name => '[% name %]', + requires => { Catalyst => '5.10' }, + create_makefile_pl => 'passthrough', + script_files => [ glob('script/*') ], + test_files => [ glob('t/*.t'), glob('t/*/*.t') ] +); +$build->create_build_script; +__readme__ +Run script/[% apprefix %]_server.pl to test the application. +__changes__ +This file documents the revision history for Perl extension [% name %]. 0.01 [% time %] - initial revision, generated by Catalyst - __apptest__ use Test::More tests => 2; use_ok( Catalyst::Test, '[% name %]' ); ok( request('/')->is_success ); - __podtest__ use Test::More; @@ -457,7 +518,6 @@ plan skip_all => 'Test::Pod 1.14 required' if $@; plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; all_pod_files_ok(); - __podcoveragetest__ use Test::More; @@ -466,10 +526,9 @@ plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@; plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; all_pod_coverage_ok(); - __cgi__ [% startperl %] -w -BEGIN { $ENV{CATALYST_ENGINE} = 'CGI' } +BEGIN { $ENV{CATALYST_ENGINE} ||= 'CGI' } use strict; use FindBin; @@ -504,11 +563,10 @@ This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut - -__fcgi__ +__fastcgi__ [% startperl %] -w -BEGIN { $ENV{CATALYST_ENGINE} = 'FCGI' } +BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' } use strict; use FindBin; @@ -521,7 +579,7 @@ use [% name %]; =head1 NAME -fcgi - Catalyst FCGI +fastcgi - Catalyst FastCGI =head1 SYNOPSIS @@ -529,7 +587,7 @@ See L =head1 DESCRIPTION -Run a Catalyst application as fcgi. +Run a Catalyst application as fastcgi. =head1 AUTHOR @@ -543,12 +601,11 @@ This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut - __server__ [% startperl %] -w BEGIN { - $ENV{CATALYST_ENGINE} = 'HTTP'; + $ENV{CATALYST_ENGINE} ||= 'HTTP'; $ENV{CATALYST_SCRIPT_GEN} = [% scriptgen %]; } @@ -602,11 +659,10 @@ This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut - __test__ [% startperl %] -w -BEGIN { $ENV{CATALYST_ENGINE} = 'Test' } +BEGIN { $ENV{CATALYST_ENGINE} ||= 'Test' } use strict; use Getopt::Long; @@ -660,7 +716,6 @@ This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut - __create__ [% startperl %] -w @@ -699,7 +754,6 @@ create.pl [options] model|view|controller name [helper] [options] create.pl model My::Model create.pl model SomeDB CDBI dbi:SQLite:/tmp/my.db create.pl model AnotherDB CDBI dbi:Pg:dbname=foo root 4321 - create.pl Ajax See also: perldoc Catalyst::Manual @@ -721,35 +775,42 @@ This library is free software. You can redistribute it and/or modify it under the same terms as perl itself. =cut - __compclass__ package [% class %]; use strict; use base 'Catalyst::Base'; -[% IF type == 'C' %] -sub default : Private { - my ( $self, $c ) = @_; - $c->res->output('Congratulations, [% class %] is on Catalyst!'); -} - -[% END %] =head1 NAME -[% class %] - A Component +[% class %] - Catalyst component =head1 SYNOPSIS - Very simple to use +See L<[% app %]> =head1 DESCRIPTION -Very nice component. +Catalyst component. +[% IF type == 'C' %] +=head1 METHODS + +=over 4 + +=item default + +=cut +sub default : Private { + my ( $self, $c ) = @_; + $c->res->output('Congratulations, [% class %] is on Catalyst!'); +} + +=back +[% END %] =head1 AUTHOR -Clever guy +[%author%] =head1 LICENSE @@ -759,7 +820,6 @@ it under the same terms as perl itself. =cut 1; - __comptest__ [% IF type == 'C' %] use Test::More tests => 3;