X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FHelper.pm;h=9e0e9ea14b793ce47e887be5f43ee1932401ae5b;hb=6aa6b72b17e5096f91897d74f5e93a1d750b0412;hp=fd7e690587208e270edce600ea7232b5fe7f7abe;hpb=fb75d047432cf0ec288c2977951ae11581b5c2a1;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Helper.pm b/lib/Catalyst/Helper.pm index fd7e690..9e0e9ea 100644 --- a/lib/Catalyst/Helper.pm +++ b/lib/Catalyst/Helper.pm @@ -2,6 +2,7 @@ package Catalyst::Helper; use strict; use base 'Class::Accessor::Fast'; +use Config; use File::Spec; use File::Path; use IO::File; @@ -69,28 +70,38 @@ sub mk_app { $self->{dir} =~ s/\:\:/-/g; $self->{script} = File::Spec->catdir( $self->{dir}, 'script' ); $self->{appprefix} = Catalyst::Utils::appprefix($name); - $self->{startperl} = '#!/usr/bin/perl -w'; + $self->{startperl} = "#!$Config{perlpath} -w"; $self->{scriptgen} = $Catalyst::CATALYST_SCRIPT_GEN || 4; $self->{author} = $self->{author} = $ENV{'AUTHOR'} || eval { @{ [ getpwuid($<) ] }[6] } || 'Catalyst developer'; - unless ( $self->{scripts} ) { + my $gen_scripts = ( $self->{makefile} ) ? 0 : 1; + my $gen_makefile = ( $self->{scripts} ) ? 0 : 1; + my $gen_app = ( $self->{scripts} || $self->{makefile} ) ? 0 : 1; + + if ($gen_app) { $self->_mk_dirs; + $self->_mk_config; $self->_mk_appclass; - $self->_mk_makefile; + $self->_mk_rootclass; $self->_mk_readme; $self->_mk_changes; $self->_mk_apptest; $self->_mk_images; $self->_mk_favicon; } - $self->_mk_cgi; - $self->_mk_fastcgi; - $self->_mk_server; - $self->_mk_test; - $self->_mk_create; - return 1; + if ($gen_makefile) { + $self->_mk_makefile; + } + if ($gen_scripts) { + $self->_mk_cgi; + $self->_mk_fastcgi; + $self->_mk_server; + $self->_mk_test; + $self->_mk_create; + } + return $self->{dir}; } =head3 mk_component @@ -107,7 +118,7 @@ sub mk_component { $self->{author} = $self->{author} = $ENV{'AUTHOR'} || eval { @{ [ getpwuid($<) ] }[6] } || 'A clever guy'; - $self->{base} = File::Spec->catdir( $FindBin::Bin, '..' ); + $self->{base} ||= File::Spec->catdir( $FindBin::Bin, '..' ); unless ( $_[0] =~ /^(?:model|view|controller)$/i ) { my $helper = shift; my @args = @_; @@ -220,7 +231,10 @@ sub mk_file { my ( $self, $file, $content ) = @_; if ( -e $file ) { print qq/ exists "$file"\n/; - return 0 unless ( $self->{'.newfiles'} || $self->{scripts} ); + return 0 + unless ( $self->{'.newfiles'} + || $self->{scripts} + || $self->{makefile} ); if ( $self->{'.newfiles'} ) { if ( my $f = IO::File->new("< $file") ) { my $oldcontent = join( '', (<$f>) ); @@ -327,12 +341,36 @@ sub _mk_appclass { $self->render_file( 'appclass', "$mod.pm" ); } +sub _mk_rootclass { + my $self = shift; + my $c = $self->{c}; + my $name = $self->{name}; + $self->{rootname} = + $self->{short} ? "$name\::C::Root" : "$name\::Controller::Root"; + $self->render_file( 'rootclass', File::Spec->catfile( $c, "Root.pm" ) ); +} + sub _mk_makefile { my $self = shift; $self->{path} = File::Spec->catfile( 'lib', split( '::', $self->{name} ) ); $self->{path} .= '.pm'; my $dir = $self->{dir}; $self->render_file( 'makefile', "$dir\/Makefile.PL" ); + + if ( $self->{makefile} ) { + + # deprecate the old Build.PL file when regenerating Makefile.PL + $self->_deprecate_file( + File::Spec->catdir( $self->{dir}, 'Build.PL' ) ); + } +} + +sub _mk_config { + my $self = shift; + my $dir = $self->{dir}; + my $appprefix = $self->{appprefix}; + $self->render_file( 'config', + File::Spec->catfile( $dir, "$appprefix.yml" ) ); } sub _mk_readme { @@ -431,6 +469,27 @@ sub _mk_favicon { } +sub _deprecate_file { + my ( $self, $file ) = @_; + if ( -e $file ) { + my $oldcontent; + if ( my $f = IO::File->new("< $file") ) { + $oldcontent = join( '', (<$f>) ); + } + my $newfile = $file . '.deprecated'; + if ( my $f = IO::File->new("> $newfile") ) { + binmode $f; + print $f $oldcontent; + print qq/created "$newfile"\n/; + unlink $file; + print qq/removed "$file"\n/; + return 1; + } + Catalyst::Exception->throw( + message => qq/Couldn't create "$file", "$!"/ ); + } +} + =head1 HELPERS Helpers are classes that provide two methods. @@ -485,18 +544,14 @@ use warnings; # Set flags and add plugins for the application # # -Debug: activates the debug mode for very useful log messages -# Static::Simple: will serve static files from the applications root directory +# Static::Simple: will serve static files from the application's root +# directory # -use Catalyst qw/-Debug Static::Simple/; +use Catalyst qw/-Debug ConfigLoader Static::Simple/; our $VERSION = '0.01'; # -# Configure the application -# -__PACKAGE__->config( name => '[% name %]' ); - -# # Start the application # __PACKAGE__->setup; @@ -513,8 +568,46 @@ __PACKAGE__->setup; Catalyst based application. +=head1 AUTHOR + +[% author %] + +=head1 LICENSE + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + +1; +__rootclass__ +package [% rootname %]; + +use strict; +use warnings; +use base 'Catalyst::Controller'; + +# +# A empty namespace attaches this Controller to the root +# +__PACKAGE__->config->{namespace} = ''; + +=head1 NAME + +[% rootname %] - Root Controller of this Catalyst based application + +=head1 SYNOPSIS + +See L<[% name %]>. + +=head1 DESCRIPTION + +Root Controller of this Catalyst based application. + =head1 METHODS +=cut + =head2 default =cut @@ -558,19 +651,19 @@ it under the same terms as Perl itself. __makefile__ use inc::Module::Install; -name('[% name %]'); -abstract('Catalyst Application'); -author('[% author %]'); -version_from('[% path %]'); -license('perl'); +name '[% dir %]'; +all_from '[% path %]'; -requires( Catalyst => '5.57' ); +requires Catalyst => '5.64'; -install_script( glob('script/*.pl') ); +catalyst; -catalyst_files(); - -&WriteAll; +install_script glob('script/*.pl'); +auto_install; +WriteAll; +__config__ +--- +name: [% name %] __readme__ Run script/[% appprefix %]_server.pl to test the application. __changes__ @@ -579,11 +672,16 @@ This file documents the revision history for Perl extension [% name %]. 0.01 [% time %] - initial revision, generated by Catalyst __apptest__ +use strict; +use warnings; use Test::More tests => 2; -use_ok( Catalyst::Test, '[% name %]' ); -ok( request('/')->is_success ); +BEGIN { use_ok 'Catalyst::Test', '[% name %]' } + +ok( request('/')->is_success, 'Request should succeed' ); __podtest__ +use strict; +use warnings; use Test::More; eval "use Test::Pod 1.14"; @@ -592,6 +690,8 @@ plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; all_pod_files_ok(); __podcoveragetest__ +use strict; +use warnings; use Test::More; eval "use Test::Pod::Coverage 1.04"; @@ -695,7 +795,7 @@ pod2usage(1) if $help; (requires -listen) -d -daemon daemonize (requires -listen) -M -manager specify alternate process manager - (FCGI::ProcessManager sub-class) + (FCGI::ProcManager sub-class) or empty string to disable =head1 DESCRIPTION @@ -761,6 +861,8 @@ if ( $debug ) { $ENV{CATALYST_DEBUG} = 1; } +# This is require instead of use so that the above environment +# variables can be set at runtime. require [% name %]; [% name %]->run( $port, $host, { @@ -992,12 +1094,14 @@ it under the same terms as Perl itself. 1; __comptest__ +use strict; +use warnings; [% IF long_type == 'Controller' %] use Test::More tests => 3; -use_ok( Catalyst::Test, '[% app %]' ); +use_ok( 'Catalyst::Test', '[% app %]' ); use_ok('[% class %]'); -ok( request('[% uri %]')->is_success ); +ok( request('[% uri %]')->is_success, 'Request should succeed' ); [% ELSE %] use Test::More tests => 1; use_ok('[% class %]');