package Catalyst::Plugin::Compress::WithExclusions; use strict; use warnings; use base qw(Catalyst::Plugin::Compress); =head1 NAME Catalyst::Plugin::Compress::WithExclusions - Compresses all responses from the server, except excluded paths =head1 VERSION Version 0.02 =cut our $VERSION = '0.02'; my @excluded = (); =head1 SYNOPSIS use Catalyst qw/Compress::WithExclusions/; Then specifiy the excluded paths as an array ref of regular expressions and the compression format that you want to use. __PACKAGE__->config( compression_excluded => ['path_regex', ], compression_format => $format ); Accepted formats for $format are the same as defined in L =head1 DESCRIPTION It is always a good idea to compress the results that are returned from your web application, if the client can handle it. L does that for you with very little effort. However, there are times when you might not want the reponse to be compressed. For example when a returning a file that has already been zipped. The extra compression is unlikely to reduce the file size and will just add extra load to the server. This module builds upon the L module and adds the option to skip the compression step for certain url paths. So, for example, if you dont want to compress any files in the download path, then you would add the following to your config: __PACKAGE__->config( compression_excluded => ['^download', ], ); Now all urls on the site that start with download will be uncompressed and everything else will be compressed as requested. =head1 SUBROUTINES/METHODS =head2 setup This is an internal method. It checks to see if any exclusions have been added in the configuration file. =cut sub setup { my $c = shift; if (exists $c->config->{compression_excluded}) { if (ref($c->config->{compression_excluded}) eq 'ARRAY') { @excluded = @{$c->config->{compression_excluded}}; } else { if ($c->debug) { $c->log->debug("'compression_excluded' configuration should be an array reference'"); } } } $c->maybe::next::method(@_); } =head2 should_compress_response This is an internal method that first checks to see if the path should be excluded from compression and then passes on to the parent for further checks. =cut sub should_compress_response { my $c = shift; my $action = $c->req->action; foreach my $test (@excluded) { if ($action =~ /$test/) { return; } } $c->maybe::next::method(@_); } =head1 AUTHOR Jody Clements, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Catalyst::Plugin::Compress::WithExclusions You can also look for information at: =over 4 =item * RT: CPAN's request tracker (report bugs here) L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Search CPAN L =back =head1 ACKNOWLEDGEMENTS =head1 LICENSE AND COPYRIGHT Copyright 2012 Jody Clements. This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. =cut 1; # End of Catalyst::Plugin::Compress::WithExclusions