first attempt at a patch to enable compatibility with psgi files based on Catalyst...
John Napiorkowski [Tue, 3 May 2011 18:35:15 +0000 (14:35 -0400)]
lib/Catalyst.pm
lib/Catalyst/Request/Upload.pm

index c337b30..596422c 100644 (file)
@@ -2410,7 +2410,27 @@ Starts the engine.
 
 =cut
 
-sub run { my $c = shift; return $c->engine->run( $c, $c->_finalized_psgi_app, @_ ) }
+sub run {
+    my $c = shift;
+    $c->engine_loader->needs_psgi_engine_compat_hack ?
+      $c->_run_needs_psgi_engine_compat_hack(@_) :
+      $c->engine->run( $c, $c->_finalized_psgi_app, @_ );
+}
+
+sub _run_needs_psgi_engine_compat_hack {
+    my $c = shift;
+
+    ## We assume if they used the classic PSGI Engine, they must has CC:M
+    for my $metal (Catalyst::Controller::Metal->metals_for($c)) {
+        my $res = $metal->call(@_);
+        if (defined $res && !(ref $res eq 'ARRAY' && $res->[0] == 404)) {
+            return $res;
+        }
+    }
+
+    ## If we got this far, just do the psgi app
+    $c->_finalized_psgi_app->(@_)
+}
 
 =head2 $c->set_action( $action, $code, $namespace, $attrs )
 
index 1675531..4d3d099 100644 (file)
@@ -5,7 +5,7 @@ with 'MooseX::Emulate::Class::Accessor::Fast';
 
 use Catalyst::Exception;
 use File::Copy ();
-use IO::File   qw( SEEK_SET );
+use IO::File ();
 use File::Spec::Unix;
 
 has filename => (is => 'rw');
@@ -146,12 +146,12 @@ sub slurp {
 
     binmode( $handle, $layer );
 
-    $handle->seek(0, SEEK_SET);
+    $handle->seek(0, IO::File::SEEK_SET);
     while ( $handle->sysread( my $buffer, 8192 ) ) {
         $content .= $buffer;
     }
 
-    $handle->seek(0, SEEK_SET);
+    $handle->seek(0, IO::File::SEEK_SET);
     return $content;
 }