PSGI entry points (#11632) -- add a plackMiddleware section to the config file; modify share/site.psgi to load from it.
This is minimal in implementation right now in that there's no support for passing args, which would generally be objects mixed with strings, to the middlewares being added, as would be necessary if the .psgi files were to be largely migrated to the config files. I agree that it's important that upgrade scripts be able to add middleware (probably custom ones that know how to get the session from %$env) but I'm not convinced of the utility of moving much logic out of share/site.psgi.
This commit is contained in:
parent
dd6a297c06
commit
2d31f7234a
2 changed files with 52 additions and 0 deletions
|
|
@ -56,6 +56,12 @@ builder {
|
|||
Plack::App::File->new(root => $config->get('uploadsPath'));
|
||||
};
|
||||
|
||||
# enable config defined Middleware
|
||||
|
||||
for my $mw ( @{ $config->get('plackMiddleware') || [] } ) {
|
||||
enable $mw;
|
||||
}
|
||||
|
||||
# Return the app
|
||||
mount '/' => $wg->to_app;
|
||||
};
|
||||
|
|
|
|||
46
t/PSGI/ConfigMiddleware.t
Normal file
46
t/PSGI/ConfigMiddleware.t
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 3;
|
||||
|
||||
use Plack::Test;
|
||||
use Plack::Util;
|
||||
use HTTP::Request::Common;
|
||||
use WebGUI::Paths;
|
||||
use WebGUI::Test;
|
||||
|
||||
SKIP: {
|
||||
skip 'set WEBGUI_LIVE to enable these tests', 3 unless $ENV{WEBGUI_LIVE};
|
||||
|
||||
my $session = WebGUI::Test->session;
|
||||
$session->config->addToArray( 'plackMiddleware', '+WebGUI::Middleware::SHOUTING' );
|
||||
|
||||
local $ENV{WEBGUI_CONFIG} = WebGUI::Test->file; # tell the share/site.psgi which site to load
|
||||
|
||||
my $app = Plack::Util::load_psgi( WebGUI::Paths->defaultPSGI );
|
||||
|
||||
ok( $app, "created a PSGI app from app.psgi" );
|
||||
|
||||
test_psgi $app, sub {
|
||||
my $cb = shift;
|
||||
my $res = $cb->( GET "/home" );
|
||||
is $res->code, 200, 'able to fetch pages with WebGUI::Middleware::SHOUTING installed';
|
||||
like $res->content, qr/EASY TO USE WEB APPLICATION FRAMEWORK/, 'contains the text "EASY TO USE WEB APPLICATION FRAMEWORK"';
|
||||
};
|
||||
|
||||
$session->config->deleteFromArray( 'plackMiddleware', '+WebGUI::Middleware::SHOUTING' );
|
||||
}
|
||||
|
||||
package WebGUI::Middleware::SHOUTING;
|
||||
BEGIN { $INC{'WebGUI/Middleware/SHOUTING.pm'} = __FILE__; };
|
||||
|
||||
use parent 'Plack::Middleware';
|
||||
|
||||
sub call {
|
||||
my($self, $env) = @_;
|
||||
my $res = $self->app->($env);
|
||||
for ( ref $res->[2] ? @{ $res->[2] } : ( $res->[2] ) ) {
|
||||
s{>(.*?)<}{'>' . uc($1) . '<'}gse;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue