X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=dc56b884a0d5de88ab054471ffe0f02eb91600e6;hb=8f62c91addd1c43b8639b2a11b0eb007d9834f46;hp=aca49201cfe30c72d81b99f005cff2ce518e49ec;hpb=b5ecfcf07b8ffe7e9984f0279c8781ce51c6ac6a;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index aca4920..dc56b88 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::Test; - -require Catalyst::Engine::HTTP; -require Catalyst::Engine::CGI; - -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 = 18; +our $CATALYST_SCRIPT_GEN = 24; __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 ) = @_; @@ -401,7 +389,7 @@ 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"); } @@ -416,7 +404,7 @@ 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"); } @@ -431,7 +419,7 @@ 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"); } @@ -687,8 +675,11 @@ 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; } =head2 $c->welcome_message @@ -1025,7 +1016,20 @@ 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 @@ -1855,6 +1859,8 @@ Wiki: =head1 SEE ALSO +=head2 L - All you need to start with Catalyst + =head2 L - The Catalyst Manual =head2 L, L - Base classes for components