X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=613ab2b3466d9c76d8fc5c1b963a68565e75698d;hp=4e97a4922c70987bef9ad2ff0fc60ebd6b99c94a;hb=8ad6fd584ff18d88abf31629d4593ba94eeb7647;hpb=23a34adfebeb887fb66214421cb3064f83e796cd diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 4e97a49..613ab2b 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -84,7 +84,7 @@ __PACKAGE__->stats_class('Catalyst::Stats'); # Remember to update this in Catalyst::Runtime as well! -our $VERSION = '5.90003'; +our $VERSION = '5.90004'; sub import { my ( $class, @arguments ) = @_; @@ -276,11 +276,11 @@ the name will be replaced with underscores, e.g. MyApp::Web should use MYAPP_WEB_HOME. If both variables are set, the MYAPP_HOME one will be used. If none of these are set, Catalyst will attempt to automatically detect the -home directory. If you are working in a development envirnoment, Catalyst +home directory. If you are working in a development environment, Catalyst will try and find the directory containing either Makefile.PL, Build.PL or dist.ini. If the application has been installed into the system (i.e. you have done C), then Catalyst will use the path to your -application module, without the .pm extension (ie, /foo/MyApp if your +application module, without the .pm extension (e.g., /foo/MyApp if your application was installed at /foo/MyApp.pm) =head2 -Log @@ -348,9 +348,10 @@ call to forward. Note that L<< forward|/"$c->forward( $action [, \@arguments ] )" >> implies an C<< eval { } >> around the call (actually -L<< execute|/"$c->execute( $class, $coderef )" >> does), thus de-fatalizing -all 'dies' within the called action. If you want C to propagate you -need to do something like: +L<< execute|/"$c->execute( $class, $coderef )" >> does), thus rendering all +exceptions thrown by the called action non-fatal and pushing them onto +$c->error instead. If you want C to propagate you need to do something +like: $c->forward('foo'); die join "\n", @{ $c->error } if @{ $c->error }; @@ -412,7 +413,7 @@ L return information for the visited action when they are invoked within the visited action. This is different from the behavior of L<< forward|/"$c->forward( $action [, \@arguments ] )" >>, which continues to use the $c->action object from the caller action even when -invoked from the callee. +invoked from the called action. C<< $c->stash >> is kept unchanged. @@ -1347,7 +1348,15 @@ sub uri_for { } my $action = $path; - $path = $c->dispatcher->uri_for_action($action, $captures); + # ->uri_for( $action, \@captures_and_args, \%query_values? ) + if( !@args && $action->number_of_args ) { + my $expanded_action = $c->dispatcher->expand_action( $action ); + + my $num_captures = $expanded_action->number_of_captures; + unshift @args, splice @$captures, $num_captures; + } + + $path = $c->dispatcher->uri_for_action($action, $captures); if (not defined $path) { $c->log->debug(qq/Can't find uri_for action '$action' @$captures/) if $c->debug; @@ -2258,7 +2267,7 @@ sub log_response_status_line { =head2 $c->log_response_headers($headers); -Hook method which can be wrapped by plugins to log the responseheaders. +Hook method which can be wrapped by plugins to log the response headers. No-op in the default implementation. =cut @@ -2619,17 +2628,32 @@ sub engine_class { Catalyst::EngineLoader->new({ application_name => $class, (defined $requested_engine - ? (requested_engine => $requested_engine) : ()), + ? (catalyst_engine_class => $requested_engine) : ()), }), ); } + $class->engine_loader->catalyst_engine_class; } sub setup_engine { my ($class, $requested_engine) = @_; - my $engine = $class->engine_class($requested_engine); + my $engine = do { + my $loader = $class->engine_loader; + + if (!$loader || $requested_engine) { + $loader = Catalyst::EngineLoader->new({ + application_name => $class, + (defined $requested_engine + ? (requested_engine => $requested_engine) : ()), + }), + + $class->engine_loader($loader); + } + + $loader->catalyst_engine_class; + }; # Don't really setup_engine -- see _setup_psgi_app for explanation. return if $class->loading_psgi_file; @@ -3024,7 +3048,7 @@ welcome screens C - The request body (for example file uploads) will not be parsed until it is accessed. This allows you to (for example) check authentication (and reject -the upload) before actually recieving all the data. See L +the upload) before actually receiving all the data. See L =item * @@ -3200,6 +3224,8 @@ Wiki: =head2 L - The test suite. +=begin stopwords + =head1 PROJECT FOUNDER sri: Sebastian Riedel @@ -3342,6 +3368,8 @@ rainboxx: Matthias Dietrich, C dd070: Dhaval Dhanani +=end stopwords + =head1 COPYRIGHT Copyright (c) 2005, the above named PROJECT FOUNDER and CONTRIBUTORS.