X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=fa7ca6ae714f311e92bb1c9c6d0beeab0d2b9b50;hp=5a4ad732e7c4995f0e87028aab48a8888a3fef6e;hb=d7d72ad91cc796713d84c256e08ef9b1a6473542;hpb=6f409682667c23a00552d0573c157ee3487c29bc diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 5a4ad73..fa7ca6a 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -10,6 +10,7 @@ use Catalyst::Request; use Catalyst::Request::Upload; use Catalyst::Response; use Catalyst::Utils; +use File::stat; use NEXT; use Text::SimpleTable; use Path::Class; @@ -18,19 +19,6 @@ use URI; use Scalar::Util qw/weaken/; use attributes; -# For PAR -require Catalyst::Helper; -require Catalyst::PAR; -require Catalyst::Build; - -require Catalyst::Engine::HTTP; -require Catalyst::Engine::CGI; -require Catalyst::Engine::FastCGI; - -require Catalyst::Controller; -require Catalyst::Model; -require Catalyst::View; - __PACKAGE__->mk_accessors( qw/counter request response state action stack namespace/ ); @@ -56,7 +44,7 @@ our $DETACH = "catalyst_detach\n"; require Module::Pluggable::Fast; # Helper script generation -our $CATALYST_SCRIPT_GEN = 14; +our $CATALYST_SCRIPT_GEN = 25; __PACKAGE__->mk_classdata($_) for qw/components arguments dispatcher engine log dispatcher_class @@ -67,7 +55,7 @@ __PACKAGE__->engine_class('Catalyst::Engine::CGI'); __PACKAGE__->request_class('Catalyst::Request'); __PACKAGE__->response_class('Catalyst::Response'); -our $VERSION = '5.57'; +our $VERSION = '5.62'; sub import { my ( $class, @arguments ) = @_; @@ -197,43 +185,37 @@ they are loaded in exactly the order in which they appear. The following flags are supported: -=over 4 - -=item -Debug +=head2 -Debug Enables debug output. -=item -Engine +=head2 -Engine Forces Catalyst to use a specific engine. Omit the C prefix of the engine name, i.e.: use Catalyst qw/-Engine=CGI/; -=item -Home +=head2 -Home Forces Catalyst to use a specific home directory, e.g.: use Catalyst qw[-Home=/usr/sri]; -=item -Log +=head2 -Log Specifies log level. -=back - =head1 METHODS =head2 Information about the current request -=over 4 - -=item $c->action +=head2 $c->action Returns a L object for the current action, which stringifies to the action name. See L. -=item $c->namespace +=head2 $c->namespace Returns the namespace of the current action, i.e., the uri prefix corresponding to the controller of the current action. For example: @@ -241,22 +223,18 @@ corresponding to the controller of the current action. For example: # in Controller::Foo::Bar $c->namespace; # returns 'foo/bar'; -=item $c->request +=head2 $c->request -=item $c->req +=head2 $c->req Returns the current L object. See L. -=back - =head2 Processing and response to the current request -=over 4 +=head2 $c->forward( $action [, \@arguments ] ) -=item $c->forward( $action [, \@arguments ] ) - -=item $c->forward( $class, $method, [, \@arguments ] ) +=head2 $c->forward( $class, $method, [, \@arguments ] ) Forwards processing to a private action. If you give a class name but no method, C is called. You may also optionally pass arguments @@ -273,9 +251,9 @@ C<$c-Ereq-Eargs> will be restored to the previous values. sub forward { my $c = shift; $c->dispatcher->forward( $c, @_ ) } -=item $c->detach( $action [, \@arguments ] ) +=head2 $c->detach( $action [, \@arguments ] ) -=item $c->detach( $class, $method, [, \@arguments ] ) +=head2 $c->detach( $class, $method, [, \@arguments ] ) The same as C, but doesn't return. @@ -283,13 +261,15 @@ The same as C, but doesn't return. sub detach { my $c = shift; $c->dispatcher->detach( $c, @_ ) } -=item $c->error +=head2 $c->error -=item $c->error($error, ...) +=head2 $c->error($error, ...) -=item $c->error($arrayref) +=head2 $c->error($arrayref) -Returns an arrayref containing error messages. +Returns an arrayref containing error messages. If Catalyst encounters an +error while processing a request, it stores the error in $c->error. This +method should not be used to store non-fatal error messages. my @error = @{ $c->error }; @@ -297,7 +277,8 @@ Add a new error. $c->error('Something bad happened'); -Clear errors. +Clear errors. You probably don't want to clear the errors unless you are +implementing a custom error screen. $c->error(0); @@ -313,13 +294,13 @@ sub error { return $c->{error} || []; } -=item $c->response +=head2 $c->response -=item $c->res +=head2 $c->res Returns the current L object. -=item $c->stash +=head2 $c->stash Returns a hashref to the stash, which may be used to store data and pass it between components during a request. You can also set hash keys by @@ -347,19 +328,15 @@ sub stash { return $c->{stash}; } -=item $c->state +=head2 $c->state Contains the return value of the last executed action. -=back - =head2 Component Accessors -=over 4 +=head2 $c->comp($name) -=item $c->comp($name) - -=item $c->component($name) +=head2 $c->component($name) Gets a component object by name. This method is no longer recommended, unless you want to get a specific component by full @@ -401,7 +378,7 @@ sub component { return sort keys %{ $c->components }; } -=item $c->controller($name) +=head2 $c->controller($name) Gets a L instance by name. @@ -412,11 +389,11 @@ Gets a L instance by name. sub controller { my ( $c, $name ) = @_; my $controller = $c->comp("Controller::$name"); - return $controller if $controller; + return $controller if defined $controller; return $c->comp("C::$name"); } -=item $c->model($name) +=head2 $c->model($name) Gets a L instance by name. @@ -427,11 +404,11 @@ Gets a L instance by name. sub model { my ( $c, $name ) = @_; my $model = $c->comp("Model::$name"); - return $model if $model; + return $model if defined $model; return $c->comp("M::$name"); } -=item $c->view($name) +=head2 $c->view($name) Gets a L instance by name. @@ -442,23 +419,19 @@ Gets a L instance by name. sub view { my ( $c, $name ) = @_; my $view = $c->comp("View::$name"); - return $view if $view; + return $view if defined $view; return $c->comp("V::$name"); } -=back - =head2 Class data and helper classes -=over 4 - -=item $c->config +=head2 $c->config Returns or takes a hashref containing the application's configuration. __PACKAGE__->config({ db => 'dsn:SQLite:foo.db' }); -=item $c->debug +=head2 $c->debug Overload to enable debug messages (same as -Debug option). @@ -466,17 +439,17 @@ Overload to enable debug messages (same as -Debug option). sub debug { 0 } -=item $c->dispatcher +=head2 $c->dispatcher Returns the dispatcher instance. Stringifies to class name. See L. -=item $c->engine +=head2 $c->engine Returns the engine instance. Stringifies to the class name. See L. -=item $c->log +=head2 $c->log Returns the logging object instance. Unless it is already set, Catalyst sets this up with a L object. To use your own log class: @@ -489,13 +462,9 @@ L man page. =cut -=back - =head2 Utility methods -=over 4 - -=item $c->path_to(@path) +=head2 $c->path_to(@path) Merges C<@path> with C<$c-Econfig-E{home}> and returns a L object. @@ -513,7 +482,7 @@ sub path_to { else { return file( $c->config->{home}, @path ) } } -=item $c->plugin( $name, $class, @args ) +=head2 $c->plugin( $name, $class, @args ) Helper method for plugins. It creates a classdata accessor/mutator and loads and instantiates the given class. @@ -548,7 +517,7 @@ sub plugin { if $class->debug; } -=item MyApp->setup +=head2 MyApp->setup Initializes the dispatcher and engine, loads any plugins, and loads the model, view, and controller components. You may also specify an array @@ -610,8 +579,11 @@ sub setup { <<"EOF") if ( $ENV{CATALYST_SCRIPT_GEN} && ( $ENV{CATALYST_SCRIPT_GEN} < $Catalyst::CATALYST_SCRIPT_GEN ) ); You are running an old script! - Please update by running: - catalyst.pl -nonew -scripts $class + Please update by running (this will overwrite existing files): + catalyst.pl -force -scripts $class + + or (this will not overwrite existing files): + catalyst.pl -scripts $class EOF if ( $class->debug ) { @@ -677,7 +649,7 @@ EOF $class->log->_flush() if $class->log->can('_flush'); } -=item $c->uri_for( $path, [ @args ] ) +=head2 $c->uri_for( $path, [ @args ] ) Merges path with C<$c-Erequest-Ebase> for absolute uri's and with C<$c-Enamespace> for relative uri's, then returns a @@ -703,11 +675,14 @@ sub uri_for { # join args with '/', or a blank string my $args = ( scalar @args ? '/' . join( '/', @args ) : '' ); - return URI->new_abs( URI->new_abs( "$path$args", "$basepath$namespace" ), - $base )->canonical; + $args =~ s/^\/// unless $path; + my $res = + URI->new_abs( URI->new_abs( "$path$args", "$basepath$namespace" ), $base ) + ->canonical; + $res; } -=item $c->welcome_message +=head2 $c->welcome_message Returns the Catalyst welcome HTML page. @@ -852,32 +827,28 @@ perldoc setup_dispatcher +=head2 $c->setup_dispatcher Sets up dispatcher. @@ -1550,7 +1533,7 @@ sub setup_dispatcher { $class->dispatcher( $dispatcher->new ); } -=item $c->setup_engine +=head2 $c->setup_engine Sets up engine. @@ -1674,7 +1657,7 @@ qq/Couldn't load engine "$engine" (maybe you forgot to install it?), "$@"/ $class->engine( $engine->new ); } -=item $c->setup_home +=head2 $c->setup_home Sets up the home directory. @@ -1701,7 +1684,7 @@ sub setup_home { } } -=item $c->setup_log +=head2 $c->setup_log Sets up log. @@ -1728,7 +1711,7 @@ sub setup_log { } } -=item $c->setup_plugins +=head2 $c->setup_plugins Sets up plugins. @@ -1756,11 +1739,11 @@ sub setup_plugins { } } -=item $c->stack +=head2 $c->stack Returns the stack. -=item $c->write( $data ) +=head2 $c->write( $data ) Writes $data to the output stream. When using this method directly, you will need to manually set the C header to the length of @@ -1777,7 +1760,7 @@ sub write { return $c->engine->write( $c, @_ ); } -=item version +=head2 version Returns the Catalyst version number. Mostly useful for "powered by" messages in template systems. @@ -1786,8 +1769,6 @@ messages in template systems. sub version { return $Catalyst::VERSION } -=back - =head1 INTERNAL ACTIONS Catalyst uses internal actions like C<_DISPATCH>, C<_BEGIN>, C<_AUTO>, @@ -1877,23 +1858,21 @@ Wiki: =head1 SEE ALSO -=over 4 - -=item L - The Catalyst Manual +=head2 L - All you need to start with Catalyst -=item L, L - Base classes for components +=head2 L - The Catalyst Manual -=item L - Core engine +=head2 L, L - Base classes for components -=item L - Log class. +=head2 L - Core engine -=item L - Request object +=head2 L - Log class. -=item L - Response object +=head2 L - Request object -=item L - The test suite. +=head2 L - Response object -=back +=head2 L - The test suite. =head1 CREDITS @@ -1927,6 +1906,8 @@ David Kamholz David Naughton +Drew Taylor + Gary Ashton Jones Geoff Richards