X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=dc56b884a0d5de88ab054471ffe0f02eb91600e6;hp=904693bb829a541514169c21cfb37ba2832aa28c;hb=20682ed82be3b342c7a64bdbbb4e2752be3d688c;hpb=f991f6a0dd3b2fc63223bf206c402fce8213807f diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 904693b..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; @@ -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 = 24; __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 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"); } @@ -403,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"); } @@ -418,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"); } @@ -674,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 @@ -1012,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 @@ -1842,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