X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=083c0affaaec73093fe1f3b1b7d51a70b10fc267;hp=03ce6ab1f5adbe25916dc7ae0ba5e2c18de8d598;hb=0c6352ff331d7d1c43931d24e1fd8efb21b6d902;hpb=ccfec942b305481ff0c471d353e2663b1f768bf9 diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 03ce6ab..083c0af 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -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; @@ -1249,7 +1252,7 @@ EOF A hook to attach modifiers to. This method does not do anything except set the C accessor. -Applying method modifiers to the C method doesn't work, because of quirky thingsdone for plugin setup. +Applying method modifiers to the C 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 ) @@ -2677,6 +2665,18 @@ sub _setup_psgi_app { # .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 + + $app->engine(undef); + $app->setup_engine; + + # ^^ We need to do this because even though we are discarded $psgi_app, the + # fact that it was loaded above means that Catalyst Engine now has the + # wrong value (PSGI), which persists due to the singleton nature of all + # this stuff. This solution is probably a lame hack but did work for all + # the cases we know about. Hopefully we can pull out this crap soon + # Please note that if the fact that the psgi file was loaded started to set + # values in areas outside Engine this hack will probably fail. + warn <<"EOW"; Found a legacy Catalyst::Engine::PSGI .psgi file at ${psgi_file}. @@ -2688,7 +2688,23 @@ EOW return $app->apply_default_middlewares($app->psgi_app); } -# FIXME - document me +=head2 $c->apply_default_middlewares + +Adds the following L middlewares to your application, since they are +useful and commonly needed: + +L, (conditionally added based on the status +of your $ENV{REMOTE_ADDR}, and can be forced on with C +or forced off with C), L +(if you are using Lighttpd), L (always +applied since this middleware is smart enough to conditionally apply itself). + +Additionally if we detect we are using Nginx, we add a bit of custom middleware +to solve some problems with the way that server handles $ENV{PATH_INFO} and +$ENV{SCRIPT_NAME} + +=cut + sub apply_default_middlewares { my ($app, $psgi_app) = @_; @@ -2873,7 +2889,7 @@ the plugin name does not begin with C. 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) {