package Plack::Middleware::SimpleContentFilter; use strict; use warnings; use parent qw( Plack::Middleware ); use Plack::Util; use Plack::Util::Accessor qw( filter ); sub call { my $self = shift; my $res = $self->app->(@_); $self->response_cb($res, sub { my $res = shift; my $h = Plack::Util::headers($res->[1]); return unless $h->get('Content-Type'); if ($h->get('Content-Type') =~ m!^text/!) { return sub { my $chunk = shift; return unless defined $chunk; local $_ = $chunk; $self->filter->(); return $_; }; } }); } 1; __END__ =head1 NAME Plack::Middleware::SimpleContentFilter - Filters response content =head1 SYNOPSIS use Plack::Builder; my $app = sub { return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Foo' ] ]; }; builder { enable "Plack::Middleware::SimpleContentFilter", filter => sub { s/Foo/Bar/g; }; $app; }; =head1 DESCRIPTION B. Plack::Middleware::SimpleContentFilter is a simple content text filter to run against response body. This middleware is only enabled against responses with C Content-Type. =head1 AUTHOR Tatsuhiko Miyagawa =cut