X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=b04806c38e0d6d38c16fe297ca0cae1edebba17e;hp=5f47a656353f071977e4025da84a9304664b571c;hb=87e9f9abcaad3cbb740a4ee4a814bf94abaff6c6;hpb=d3e7a648cc29a8b45ddcd4ef731e3f9b0b4f919c
diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm
index 5f47a65..b04806c 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;
@@ -43,7 +44,7 @@ our $DETACH = "catalyst_detach\n";
require Module::Pluggable::Fast;
# Helper script generation
-our $CATALYST_SCRIPT_GEN = 19;
+our $CATALYST_SCRIPT_GEN = 25;
__PACKAGE__->mk_classdata($_)
for qw/components arguments dispatcher engine log dispatcher_class
@@ -54,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 ) = @_;
@@ -388,7 +389,7 @@ Gets a L Welcome to the wonderful world of Catalyst.
This MVC
framework will make web development something you had
- never expected it to be: Fun, rewarding and quick.
That really depends on what you want to do. We do, however, provide you with a few starting points.
@@ -792,12 +795,12 @@ perldoc controllers, - models and - views, + models, and + views; they can save you a lot of work.script/${prefix}_create.pl -help
Also, be sure to check out the vast and growing - collection of plugins for Catalyst on CPAN, + collection of plugins for Catalyst on CPAN; you are likely to find what you need there.
@@ -922,6 +925,7 @@ sub execute { push @{ $c->{stats} }, [ $action, sprintf( '%fs', $elapsed ) ]; } } + my $last = ${ $c->stack }[-1]; pop( @{ $c->stack } ); if ( my $error = $@ ) { @@ -930,7 +934,9 @@ sub execute { else { unless ( ref $error ) { chomp $error; - $error = qq/Caught exception "$error"/; + my $class = $last->class; + my $name = $last->name; + $error = qq/Caught exception in $class->$name "$error"/; } $c->error($error); $c->state(0); @@ -1015,7 +1021,19 @@ sub finalize_headers { # Content-Length if ( $c->response->body && !$c->response->content_length ) { - $c->response->content_length( bytes::length( $c->response->body ) ); + + # get the length from a filehandle + if ( ref $c->response->body && $c->response->body->can('read') ) { + if ( my $stat = stat $c->response->body ) { + $c->response->content_length( $stat->size ); + } + else { + $c->log->warn('Serving filehandle without a content-length'); + } + } + else { + $c->response->content_length( bytes::length( $c->response->body ) ); + } } # Errors @@ -1541,7 +1559,7 @@ sub setup_engine { $engine = 'Catalyst::Engine::' . $ENV{ uc($class) . '_ENGINE' }; } - if ( !$engine && $ENV{MOD_PERL} ) { + if ( $ENV{MOD_PERL} ) { # create the apache method { @@ -1557,21 +1575,25 @@ sub setup_engine { if ( $software eq 'mod_perl' ) { - if ( $version >= 1.99922 ) { - $engine = 'Catalyst::Engine::Apache2::MP20'; - } - - elsif ( $version >= 1.9901 ) { - $engine = 'Catalyst::Engine::Apache2::MP19'; - } - - elsif ( $version >= 1.24 ) { - $engine = 'Catalyst::Engine::Apache::MP13'; - } + if ( !$engine ) { + + if ( $version >= 1.99922 ) { + $engine = 'Catalyst::Engine::Apache2::MP20'; + } + + elsif ( $version >= 1.9901 ) { + $engine = 'Catalyst::Engine::Apache2::MP19'; + } + + elsif ( $version >= 1.24 ) { + $engine = 'Catalyst::Engine::Apache::MP13'; + } + + else { + Catalyst::Exception->throw( message => + qq/Unsupported mod_perl version: $ENV{MOD_PERL}/ ); + } - else { - Catalyst::Exception->throw( message => - qq/Unsupported mod_perl version: $ENV{MOD_PERL}/ ); } # install the correct mod_perl handler @@ -1845,6 +1867,8 @@ Wiki: =head1 SEE ALSO +=head2 L