Docs
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 77844da..bdb37bf 100644 (file)
@@ -75,7 +75,7 @@ our $GO        = Catalyst::Exception::Go->new;
 __PACKAGE__->mk_classdata($_)
   for qw/components arguments dispatcher engine log dispatcher_class
   engine_loader context_class request_class response_class stats_class
-  setup_finished _psgi_app/;
+  setup_finished _psgi_app loading_psgi_file/;
 
 __PACKAGE__->dispatcher_class('Catalyst::Dispatcher');
 __PACKAGE__->request_class('Catalyst::Request');
@@ -866,6 +866,9 @@ sub component {
             return $c->_filter_component( $comp, @args ) if $comp;
         }
 
+        return
+            if $c->config->{disable_component_resolution_regex_fallback};
+
         # This is here so $c->comp( '::M::' ) works
         my $query = ref $name ? $name : qr{$name}i;
 
@@ -1120,7 +1123,7 @@ sub setup {
     $class->setup_plugins( delete $flags->{plugins} );
     $class->setup_dispatcher( delete $flags->{dispatcher} );
     if (my $engine = delete $flags->{engine}) {
-        $class->log->warn("Specifying the engine in ->setup is no longer supported, XXX FIXME");
+        $class->log->warn("Specifying the engine in ->setup is no longer supported, see Catalyst::Upgrading");
     }
     $class->setup_engine();
     $class->setup_stats( delete $flags->{stats} );
@@ -1249,7 +1252,7 @@ EOF
 A hook to attach modifiers to. This method does not do anything except set the
 C<setup_finished> accessor.
 
-Applying method modifiers to the C<setup> method doesn't work, because of quirky thingsdone for plugin setup.
+Applying method modifiers to the C<setup> method doesn't work, because of quirky things done for plugin setup.
 
 Example:
 
@@ -1692,8 +1695,8 @@ sub execute {
                 $error = qq/Caught exception in $class->$name "$error"/;
             }
             $c->error($error);
-            $c->state(0);
         }
+        $c->state(0);
     }
     return $c->state;
 }
@@ -2411,25 +2414,10 @@ Starts the engine.
 =cut
 
 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->(@_)
+  my $app = shift;
+  $app->engine_loader->needs_psgi_engine_compat_hack ?
+    $app->engine->run($app, @_) :
+      $app->engine->run( $app, $app->_finalized_psgi_app, @_ );
 }
 
 =head2 $c->set_action( $action, $code, $namespace, $attrs )
@@ -2630,6 +2618,9 @@ sub setup_engine {
         }),
     );
 
+    # Don't really setup_engine -- see _setup_psgi_app for explanation.
+    return if $class->loading_psgi_file;
+
     my $engine = $class->engine_class;
     Class::MOP::load_class($engine);
 
@@ -2668,15 +2659,20 @@ sub _setup_psgi_app {
         );
 
         next unless -e $psgi_file;
+
+        # If $psgi_file calls ->setup_engine, it's doing so to load
+        # Catalyst::Engine::PSGI. But if it does that, we're only going to
+        # throw away the loaded PSGI-app and load the 5.9 Catalyst::Engine
+        # anyway. So set a flag (ick) that tells setup_engine not to populate
+        # $c->engine or do any other things we might regret.
+
+        $app->loading_psgi_file(1);
         my $psgi_app = Plack::Util::load_psgi($psgi_file);
+        $app->loading_psgi_file(0);
 
         return $psgi_app
             unless $app->engine_loader->needs_psgi_engine_compat_hack;
 
-        # load_psgi ran a .psgi file doing ->setup_engine('PSGI'). That's what
-        # .psgi files generated by the old Engine::PSGI do. Those return an app
-        # coderef calling into MyApp->run, which doesn't work anymore, so we're
-        # just ignoring it and use the wrapped legacy psgi app
         warn <<"EOW";
 Found a legacy Catalyst::Engine::PSGI .psgi file at ${psgi_file}.
 
@@ -2889,7 +2885,7 @@ the plugin name does not begin with C<Catalyst::Plugin::>.
         my $class = ref $proto || $proto;
 
         Class::MOP::load_class( $plugin );
-        $class->log->warn( "$plugin inherits from 'Catalyst::Component' - this is decated and will not work in 5.81" )
+        $class->log->warn( "$plugin inherits from 'Catalyst::Component' - this is deprecated and will not work in 5.81" )
             if $plugin->isa( 'Catalyst::Component' );
         $proto->_plugins->{$plugin} = 1;
         unless ($instant) {