Revision history for Perl extension Catalyst::Plugin::Static::Simple
+0.16
+ - Allow all files in directories defined by the config option 'dirs'
+ to be served as static even if the file matches ignore_dirs or
+ ignore_extensions.
+ - Fixed bug where 204 or 304 status codes would result in a 500 error
+ under mod_perl.
+
0.15 2006-12-08 22:30:00
- Quote metacharacters used in $c->config->{dirs} (Vlad Dan Dascalescu)
- store Mime::Types object in config hash instead of as classdata
use IO::File ();
use MIME::Types ();
-our $VERSION = '0.15';
+our $VERSION = '0.16';
__PACKAGE__->mk_accessors( qw/_static_file _static_debug_message/ );
$c->error( "Error compiling static dir regex '$dir': $@" );
}
if ( $path =~ $re ) {
- if ( $c->_locate_static_file( $path ) ) {
+ if ( $c->_locate_static_file( $path, 1 ) ) {
$c->_debug_msg( 'from static directory' )
if $config->{debug};
} else {
$c->log->debug( 'Static::Simple: ' . join q{ }, @{$c->_debug_msg} );
}
- if ( $c->res->status =~ /^(1\d\d|[23]04)$/xms ) {
- $c->res->headers->remove_content_headers;
- return $c->finalize_headers;
- }
-
return $c->NEXT::ACTUAL::finalize(@_);
}
# Search through all included directories for the static file
# Based on Template Toolkit INCLUDE_PATH code
sub _locate_static_file {
- my ( $c, $path ) = @_;
+ my ( $c, $path, $in_static_dir ) = @_;
$path = File::Spec->catdir(
File::Spec->no_upwards( File::Spec->splitdir( $path ) )
$dir =~ s/(\/|\\)$//xms;
if ( -d $dir && -f $dir . '/' . $path ) {
- # do we need to ignore the file?
- for my $ignore ( @{ $config->{ignore_dirs} } ) {
- $ignore =~ s{(/|\\)$}{};
- if ( $path =~ /^$ignore(\/|\\)/ ) {
- $c->_debug_msg( "Ignoring directory `$ignore`" )
- if $config->{debug};
- next DIR_CHECK;
+ # Don't ignore any files in static dirs defined with 'dirs'
+ unless ( $in_static_dir ) {
+ # do we need to ignore the file?
+ for my $ignore ( @{ $config->{ignore_dirs} } ) {
+ $ignore =~ s{(/|\\)$}{};
+ if ( $path =~ /^$ignore(\/|\\)/ ) {
+ $c->_debug_msg( "Ignoring directory `$ignore`" )
+ if $config->{debug};
+ next DIR_CHECK;
+ }
}
- }
- # do we need to ignore based on extension?
- for my $ignore_ext ( @{ $config->{ignore_extensions} } ) {
- if ( $path =~ /.*\.${ignore_ext}$/ixms ) {
- $c->_debug_msg( "Ignoring extension `$ignore_ext`" )
- if $config->{debug};
- next DIR_CHECK;
+ # do we need to ignore based on extension?
+ for my $ignore_ext ( @{ $config->{ignore_extensions} } ) {
+ if ( $path =~ /.*\.${ignore_ext}$/ixms ) {
+ $c->_debug_msg( "Ignoring extension `$ignore_ext`" )
+ if $config->{debug};
+ next DIR_CHECK;
+ }
}
}
use FindBin;\r
use lib "$FindBin::Bin/lib";\r
\r
-use Test::More tests => 8;\r
+use Test::More tests => 10;\r
use Catalyst::Test 'TestApp';\r
\r
# test defined static dirs\r
ok( my $res = request('http://localhost/always-static/test'), 'request ok' );\r
is( $res->content_type, 'text/plain', 'text/plain ok' );\r
\r
+# a file with an extension in ignore_extensions still gets served\r
+ok( $res = request('http://localhost/always-static/test.html'), 'request ok' );\r
+is( $res->code, 200, 'html file in dirs get served' );\r
+\r
# a missing file in a defined static dir will return 404\r
ok( $res = request('http://localhost/always-static/404.txt'), 'request ok' );\r
is( $res->code, 404, '404 ok' );\r