Fix Engine::Stomp with psgi
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 173483a..3fc68c3 100644 (file)
@@ -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<Catalyst::Request>.
 
 =head2 $c->response_class
 
-Returns or sets the response class.
+Returns or sets the response class. Defaults to L<Catalyst::Response>.
 
 =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]) },