X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=56260719f495ff86da8bee8d7416e0587828f473;hb=8e03d1bada5e205dbe4b9aad181ed606dd04dc4e;hp=03b0765f0541fce22f3a132b074b1aa383d7b8ff;hpb=d82b4dae25a2acf8e6b0f02a111a59d1d11c93f7;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 03b0765..5626071 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -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'); @@ -84,7 +84,7 @@ __PACKAGE__->stats_class('Catalyst::Stats'); # Remember to update this in Catalyst::Runtime as well! -our $VERSION = '5.89002'; +our $VERSION = '5.89003'; sub import { my ( $class, @arguments ) = @_; @@ -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 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; } @@ -2410,7 +2413,12 @@ Starts the engine. =cut -sub run { my $c = shift; return $c->engine->run( $c, $c->_finalized_psgi_app, @_ ) } +sub run { + 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 ) @@ -2596,7 +2604,8 @@ Sets up engine. sub engine_class { my $class = shift; - $class->engine_loader->catalyst_engine_class(@_); + confess("Setting ->engine_class manually is no longer supported. XXX FIXME") if scalar @_; + $class->engine_loader->catalyst_engine_class; } sub setup_engine { @@ -2610,17 +2619,27 @@ 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); if ($ENV{MOD_PERL}) { my $apache = $class->engine_loader->auto; - # FIXME - Immutable - $class->meta->add_method(handler => sub { + + my $meta = find_meta($class); + my $was_immutable = $meta->is_immutable; + my %immutable_options = $meta->immutable_options; + $meta->make_mutable if $was_immutable; + + $meta->add_method(handler => sub { my $r = shift; my $psgi_app = $class->psgi_app; $apache->call_app($r, $psgi_app); }); + + $meta->make_immutable(%immutable_options) if $was_immutable; } $class->engine( $engine->new ); @@ -2648,15 +2667,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}. @@ -2869,7 +2893,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) {