X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=3fc68c36a758f168eb75bf8a8fa22642f96327b6;hb=1e5dad0099d51c919670c0e765615937b0fd4dae;hp=173483a910fad1d15571c7056eb8adda6aa91d2e;hpb=acbecf084395e9b46e607a3fe244faa3c1bd3abb;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 173483a..3fc68c3 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -30,6 +30,7 @@ use Class::C3::Adopt::NEXT; use List::MoreUtils qw/uniq/; use attributes; use String::RewritePrefix; +use Catalyst::Engine::Loader; use utf8; use Carp qw/croak carp shortmess/; use Try::Tiny; @@ -70,18 +71,17 @@ our $GO = Catalyst::Exception::Go->new; #maybe we should just make them attributes with a default? __PACKAGE__->mk_classdata($_) for qw/components arguments dispatcher engine log dispatcher_class - engine_class context_class request_class response_class stats_class + engine_loader context_class request_class response_class stats_class setup_finished _psgi_app/; __PACKAGE__->dispatcher_class('Catalyst::Dispatcher'); -__PACKAGE__->engine_class('Catalyst::Engine'); __PACKAGE__->request_class('Catalyst::Request'); __PACKAGE__->response_class('Catalyst::Response'); __PACKAGE__->stats_class('Catalyst::Stats'); # Remember to update this in Catalyst::Runtime as well! -our $VERSION = '5.80029'; +our $VERSION = '5.89000'; sub import { my ( $class, @arguments ) = @_; @@ -1862,7 +1862,7 @@ sub finalize_headers { } # Content-Length - if ( $response->body && !$response->content_length ) { + if ( defined $response->body && length $response->body && !$response->content_length ) { # get the length from a filehandle if ( blessed( $response->body ) && $response->body->can('read') || ref( $response->body ) eq 'GLOB' ) @@ -2376,11 +2376,11 @@ sub prepare_write { my $c = shift; $c->engine->prepare_write( $c, @_ ) } =head2 $c->request_class -Returns or sets the request class. +Returns or sets the request class. Defaults to L. =head2 $c->response_class -Returns or sets the response class. +Returns or sets the response class. Defaults to L. =head2 $c->read( [$maxlength] ) @@ -2589,20 +2589,26 @@ Sets up engine. =cut +sub engine_class { + my $class = shift; + $class->engine_loader->catalyst_engine_class(@_); +} + sub setup_engine { my ($class) = @_; + $class->engine_loader(Catalyst::Engine::Loader->new(application_name => $class)); + my $engine = $class->engine_class; Class::MOP::load_class($engine); if ($ENV{MOD_PERL}) { - require 'Catalyst/Engine/Loader.pm'; - my $apache = Catalyst::Engine::Loader->auto; + my $apache = $class->engine_loader->auto; # FIXME - Immutable $class->meta->add_method(handler => sub { my $r = shift; - my $app = $class->psgi_app; - $apache->call_app($r, $app); + my $psgi_app = $class->psgi_app; + $apache->call_app($r, $psgi_app); }); } @@ -2660,6 +2666,10 @@ sub setup_psgi_app { if -e $psgi_file; } + # Note - this is for back compatibility. Catalyst should not know + # or care about how it's deployed. The recommended way of + # configuring this is now to use the ReverseProxy middleware + # yourself if you want it in a .psgi file. return Plack::Middleware::Conditional->wrap( $app->raw_psgi_app, builder => sub { Plack::Middleware::ReverseProxy->wrap($_[0]) },