Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

make Conditional work when instantiating the middleware first

  • Loading branch information...
commit f7dc9d307861401de094d83431035f6bc2f8cdf1 1 parent 33826b5
@doy doy authored
View
7 lib/Plack/Middleware/Conditional.pm
@@ -4,12 +4,9 @@ use parent qw(Plack::Middleware);
use Plack::Util::Accessor qw( condition middleware builder );
-sub new {
- my $class = shift;
- my $self = $class->SUPER::new(@_);
-
+sub prepare_app {
+ my $self = shift;
$self->middleware( $self->builder->($self->app) );
- $self;
}
sub call {
View
45 t/Plack-Middleware/conditional_new.t
@@ -0,0 +1,45 @@
+use strict;
+no warnings;
+use Plack::Test;
+use Plack::Builder;
+use Test::More;
+use HTTP::Request::Common;
+
+use Plack::Middleware::Conditional;
+use Plack::Middleware::XFramework;
+
+my $app = sub { return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello' ] ] };
+my $mw1 = Plack::Middleware::Conditional->new(
+ condition => sub { $_[0]->{HTTP_X_FOO} =~ /Bar/i },
+ builder => sub { Plack::Middleware::XFramework->new(framework => 'Testing')->wrap($_[0]) },
+);
+my $mw2 = Plack::Middleware::Conditional->new(
+ condition => sub { $_[0]->{HTTP_X_ALLCAPS} },
+ builder => sub {
+ my $app = shift;
+ sub { my $res = $app->($_[0]); $res->[2] = [ map uc $_, @{$res->[2]} ]; $res };
+ },
+);
+
+$app = $mw2->wrap($app);
+$app = $mw1->wrap($app);
+
+test_psgi app => $app, client => sub {
+ my $cb = shift;
+
+ my($req, $res);
+
+ $req = GET "http://localhost/";
+ $res = $cb->($req);
+ ok !$res->header('X-Framework');
+
+ $req = GET "http://localhost/", 'X-Foo' => 'Bar';
+ $res = $cb->($req);
+ like $res->header('X-Framework'), qr/Testing/;
+
+ $req = GET "http://localhost/", 'X-AllCaps' => 1;
+ $res = $cb->($req);
+ is $res->content, 'HELLO';
+};
+
+done_testing;
Please sign in to comment.
Something went wrong with that request. Please try again.