X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FHelper.pm;h=c12e994d4faff3036e43dffa4954a33f9b7b0c3d;hb=93159e2580327e21aefb9e65a041e3dfd1073a7c;hp=038a077fa6ca2c03f5ee0a02ade20928c41bf63f;hpb=5b1ec88b8adbb419db77e0a0d3cd101e20b65eb5;p=catagits%2FCatalyst-Devel.git diff --git a/lib/Catalyst/Helper.pm b/lib/Catalyst/Helper.pm index 038a077..c12e994 100644 --- a/lib/Catalyst/Helper.pm +++ b/lib/Catalyst/Helper.pm @@ -16,24 +16,13 @@ use Catalyst::Exception; my %cache; - =head1 NAME Catalyst::Helper - Bootstrap a Catalyst application =head1 SYNOPSIS -See L - -=head1 DESCRIPTION - -Bootstrap a Catalyst application. Autogenerates scripts. - -=head2 METHODS - -=head3 get_file - -Slurp file from DATA. + catalyst.pl =cut @@ -53,12 +42,6 @@ sub get_file { return 0; } -=head3 mk_app - -Create the main application skeleton. - -=cut - sub mk_app { my ( $self, $name ) = @_; @@ -110,13 +93,6 @@ sub mk_app { return $self->{dir}; } -=head3 mk_component - -This method is called by create.pl to make new components -for your application. - -=cut - sub mk_component { my $self = shift; my $app = shift; @@ -145,7 +121,7 @@ sub mk_component { my $name = shift || "Missing name for model/view/controller"; my $helper = shift; my @args = @_; - return 0 if $name =~ /[^\w\:]/; + return 0 if $name =~ /[^\w\:]/; $type = lc $type; $self->{long_type} = ucfirst $type; $type = 'M' if $type =~ /model/i; @@ -207,12 +183,6 @@ sub mk_component { return 1; } -=head3 mk_dir - -Surprisingly, this function makes a directory. - -=cut - sub mk_dir { my ( $self, $dir ) = @_; if ( -d $dir ) { @@ -227,12 +197,6 @@ sub mk_dir { Catalyst::Exception->throw( message => qq/Couldn't create "$dir", "$!"/ ); } -=head3 mk_file - -writes content to a file. - -=cut - sub mk_file { my ( $self, $file, $content ) = @_; if ( -e $file ) { @@ -259,10 +223,6 @@ sub mk_file { Catalyst::Exception->throw( message => qq/Couldn't create "$file", "$!"/ ); } -=head3 next_test - -=cut - sub next_test { my ( $self, $tname ) = @_; if ($tname) { $tname = "$tname.t" } @@ -283,13 +243,6 @@ sub next_test { return File::Spec->catfile( $dir, "$type\_$tname" ); } -=head3 render_file - -Render and create a file from a template in DATA using -Template Toolkit. - -=cut - sub render_file { my ( $self, $file, $path, $vars ) = @_; $vars ||= {}; @@ -496,15 +449,54 @@ sub _deprecate_file { } } +=head1 DESCRIPTION + +This module is used by B to create a set of scripts for a +new catalyst application. The scripts each contain documentation and +will output help on how to use them if called incorrectly or in some +cases, with no arguments. + +It also provides some useful methods for a Helper module to call when +creating a component. See L. + +=head1 SCRIPTS + +=head2 _create.pl + +Used to create new components for a catalyst application at the +development stage. + +=head2 _server.pl + +The catalyst test server, starts an HTTPD which outputs debugging to +the terminal. + +=head2 _test.pl + +A script for running tests from the command-line. + +=head2 _cgi.pl + +Run your application as a CGI. + +=head2 _fastcgi.pl + +Run the application as a fastcgi app. Either by hand, or call this +from FastCgiServer in your http server config. + =head1 HELPERS +The L script creates application components using Helper +modules. The Catalyst team provides a good number of Helper modules +for you to use. You can also add your own. + Helpers are classes that provide two methods. * mk_compclass - creates the Component class * mk_comptest - creates the Component test -So when you call C, create would try to execute -Catalyst::Helper::View::TT->mk_compclass and +So when you call C, create +will try to execute Catalyst::Helper::View::TT->mk_compclass and Catalyst::Helper::View::TT->mk_comptest. See L and L for @@ -516,6 +508,73 @@ All helper classes should be under one of the following namespaces. Catalyst::Helper::View:: Catalyst::Helper::Controller:: +=head2 mk_compclass + +This method in your Helper module is called with C<$helper> +which is a L object, and whichever other arguments +the user added to the command-line. You can use the $helper to call methods +described below. + +If the Helper module does not contain a C method, it +will fall back to calling L, with an argument of +C. + +=head2 mk_comptest + +This method in your Helper module is called with C<$helper> +which is a L object, and whichever other arguments +the user added to the command-line. You can use the $helper to call methods +described below. + +If the Helper module does not contain a C method, it +will fall back to calling L, with an argument of +C. + +=head2 mk_stuff + +This method is called if the user does not supply any of the usual +component types C, C, C. It is passed the +C<$helper> object (an instance of L), and any other +arguments the user typed. + +There is no fallback for this method. + +=head1 METHODS + +These are the methods that the Helper classes can call on the +<$helper> object passed to them. + +=head2 render_file + +Render and create a file from a template in DATA using +Template Toolkit. + +=head2 get_file + +Fetch file contents from the DATA section. This is used internally by +L. + +=head2 mk_app + +Create the main application skeleton. This is called by L. + +=head2 mk_component + +This method is called by L to make new components +for your application. + +=head3 mk_dir + +Surprisingly, this function makes a directory. + +=head2 mk_file + +Writes content to a file. Called by L. + +=head2 next_test + +Calculates the name of the next numbered test file and returns it. + =head1 NOTE The helpers will read author name from /etc/passwd by default. @@ -558,7 +617,7 @@ use Catalyst::Runtime '5.70'; # Static::Simple: will serve static files from the application's root # directory -use Catalyst qw/-Debug ConfigLoader Static::Simple/; +use parent qw/Catalyst/; our $VERSION = '0.01'; @@ -574,7 +633,7 @@ our $VERSION = '0.01'; __PACKAGE__->config( name => '[% name %]' ); # Start the application -__PACKAGE__->setup; +__PACKAGE__->setup(qw/-Debug ConfigLoader Static::Simple/); =head1 NAME @@ -610,7 +669,7 @@ package [% rootname %]; use strict; use warnings; -use base 'Catalyst::Controller'; +use parent 'Catalyst::Controller'; # # Sets the actions in this controller to be registered with no prefix @@ -630,17 +689,24 @@ __PACKAGE__->config->{namespace} = ''; =cut -=head2 default +=head2 index =cut -sub default : Private { +sub index : Path Args(0) { my ( $self, $c ) = @_; # Hello World $c->response->body( $c->welcome_message ); } +sub default : Path { + my ( $self, $c ) = @_; + $c->response->body( 'Page not found' ); + $c->response->status(404); + +} + =head2 end Attempt to render a view, if needed. @@ -667,10 +733,11 @@ use inc::Module::Install; name '[% dir %]'; all_from '[% path %]'; -requires 'Catalyst' => '[% catalyst_version %]'; +requires 'Catalyst::Runtime' => '[% catalyst_version %]'; requires 'Catalyst::Plugin::ConfigLoader'; requires 'Catalyst::Plugin::Static::Simple'; requires 'Catalyst::Action::RenderView'; +requires 'parent'; requires 'YAML'; # This should reflect the config file format you've chosen # See Catalyst::Plugin::ConfigLoader for supported formats catalyst; @@ -859,8 +926,9 @@ my $port = $ENV{[% appenv %]_PORT} || $ENV{CATALYST_PORT} || 3000; my $keepalive = 0; my $restart = $ENV{[% appenv %]_RELOAD} || $ENV{CATALYST_RELOAD} || 0; my $restart_delay = 1; -my $restart_regex = '\.yml$|\.yaml$|\.pm$'; +my $restart_regex = '(?:/|^)(?!\.#).+(?:\.yml$|\.yaml$|\.pm)$'; my $restart_directory = undef; +my $follow_symlinks = 0; my @argv = @ARGV; @@ -874,12 +942,13 @@ GetOptions( 'restart|r' => \$restart, 'restartdelay|rd=s' => \$restart_delay, 'restartregex|rr=s' => \$restart_regex, - 'restartdirectory=s' => \$restart_directory, + 'restartdirectory=s@' => \$restart_directory, + 'followsymlinks' => \$follow_symlinks, ); pod2usage(1) if $help; -if ( $restart ) { +if ( $restart && $ENV{CATALYST_ENGINE} eq 'HTTP' ) { $ENV{CATALYST_ENGINE} = 'HTTP::Restarter'; } if ( $debug ) { @@ -898,6 +967,7 @@ require [% name %]; restart_delay => $restart_delay, restart_regex => qr/$restart_regex/, restart_directory => $restart_directory, + follow_symlinks => $follow_symlinks, } ); 1; @@ -925,9 +995,10 @@ require [% name %]; a restart when modified (defaults to '\.yml$|\.yaml$|\.pm$') -restartdirectory the directory to search for - modified files - (defaults to '../') - + modified files, can be set mulitple times + (defaults to '[SCRIPT_DIR]/..') + -follow_symlinks follow symlinks in search directories + (defaults to false. this is a no-op on Win32) See also: perldoc Catalyst::Manual perldoc Catalyst::Manual::Intro @@ -1044,6 +1115,7 @@ pod2usage(1) unless $helper->mk_component( '[% name %]', @ARGV ); Examples: [% appprefix %]_create.pl controller My::Controller + [% appprefix %]_create.pl controller My::Controller BindLex [% appprefix %]_create.pl -mechanize controller My::Controller [% appprefix %]_create.pl view My::View [% appprefix %]_create.pl view MyView TT @@ -1082,7 +1154,7 @@ package [% class %]; use strict; use warnings; -use base 'Catalyst::[% long_type %]'; +use parent 'Catalyst::[% long_type %]'; =head1 NAME