X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=cec982f0dc1bf1442b666237b32d9f7409815684;hb=8f076801b5c41543fdc20859452ed2cea1e1f82f;hp=a854124c58e75edff538df1ff47c8b67926f0a44;hpb=99dabb12e4a28209766f7d06d976ec265a06f905;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index a854124..cec982f 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -30,7 +30,7 @@ use Class::C3::Adopt::NEXT; use List::MoreUtils qw/uniq/; use attributes; use String::RewritePrefix; -use Catalyst::Engine::Loader; +use Catalyst::EngineLoader; use utf8; use Carp qw/croak carp shortmess/; use Try::Tiny; @@ -81,7 +81,7 @@ __PACKAGE__->stats_class('Catalyst::Stats'); # Remember to update this in Catalyst::Runtime as well! -our $VERSION = '5.89000'; +our $VERSION = '5.89001'; sub import { my ( $class, @arguments ) = @_; @@ -2407,7 +2407,7 @@ Starts the engine. =cut -sub run { my $c = shift; return $c->engine->run( $c, $c->psgi_app, @_ ) } +sub run { my $c = shift; return $c->engine->run( $c, $c->_finalized_psgi_app, @_ ) } =head2 $c->set_action( $action, $code, $namespace, $attrs ) @@ -2599,7 +2599,7 @@ sub engine_class { sub setup_engine { my ($class) = @_; - $class->engine_loader(Catalyst::Engine::Loader->new(application_name => $class)); + $class->engine_loader(Catalyst::EngineLoader->new(application_name => $class)); my $engine = $class->engine_class; Class::MOP::load_class($engine); @@ -2619,44 +2619,18 @@ sub setup_engine { return; } -=head2 $c->psgi_app - -Builds a PSGI application coderef for the catalyst application C<$c> using -Lsetup_psgi_app">, stores it internally, and returns it. On the next call -to this method, C won't be invoked again, but its persisted -return value of it will be returned. - -This is the top-level entrypoint for things that need a full blown Catalyst PSGI -app. If you only need the raw PSGI application, without any middlewares, use -Lraw_psgi_app"> instead. - -=cut - -sub psgi_app { +sub _finalized_psgi_app { my ($app) = @_; unless ($app->_psgi_app) { - my $psgi_app = $app->setup_psgi_app; + my $psgi_app = $app->_setup_psgi_app; $app->_psgi_app($psgi_app); } return $app->_psgi_app; } -=head2 $c->setup_psgi_app - -Builds a PSGI application coderef for the catalyst application C<$c>. - -If we're able to locate a C<${myapp}.psgi> file in the applications home -directory, we'll use that to obtain our code reference. - -Otherwise the raw psgi app, without any middlewares is created using -C and wrapped into L -conditionally. See L. - -=cut - -sub setup_psgi_app { +sub _setup_psgi_app { my ($app) = @_; if (my $home = Path::Class::Dir->new($app->config->{home})) { @@ -2668,12 +2642,18 @@ 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 $app->_wrapped_legacy_psgi_app; +} + +# 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. +sub _wrapped_legacy_psgi_app { + my ($app) = @_; + return Plack::Middleware::Conditional->wrap( - $app->raw_psgi_app, + $app->psgi_app, builder => sub { Plack::Middleware::ReverseProxy->wrap($_[0]) }, condition => sub { my ($env) = @_; @@ -2684,16 +2664,18 @@ sub setup_psgi_app { ); } -=head2 $c->raw_psgi_app +=head2 $c->psgi_app Returns a PSGI application code reference for the catalyst application C<$c>. This is the bare application without any middlewares -applied. C<${myapp}.psgi> is not taken into account. See -Lsetup_psgi_app">. +applied. C<${myapp}.psgi> is not taken into account. + +This is what you want to be using to retrieve the PSGI application code +reference of your Catalyst application for use in F<.psgi> files. =cut -sub raw_psgi_app { +sub psgi_app { my ($app) = @_; return $app->engine->build_psgi_app($app); }