X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FPlugin%2FStatic%2FSimple.pm;h=f15864cb40610593e24c601eb87f5fc05ffd2c86;hb=9a4b0bc2417b66931e3eaee04450c707e584cac2;hp=91cef4a7960f52df4a9e9e16d9c47c492f62c66d;hpb=41cac5ef01ba7391bb7a21fd3eb25bafd4b44e70;p=catagits%2FCatalyst-Plugin-Static-Simple.git diff --git a/lib/Catalyst/Plugin/Static/Simple.pm b/lib/Catalyst/Plugin/Static/Simple.pm old mode 100644 new mode 100755 index 91cef4a..f15864c --- a/lib/Catalyst/Plugin/Static/Simple.pm +++ b/lib/Catalyst/Plugin/Static/Simple.pm @@ -6,17 +6,27 @@ use File::Spec (); use IO::File (); use MIME::Types (); use MooseX::Types::Moose qw/ArrayRef Str/; +use Catalyst::Utils; use namespace::autoclean; -our $VERSION = '0.30'; +our $VERSION = '0.35'; has _static_file => ( is => 'rw' ); has _static_debug_message => ( is => 'rw', isa => ArrayRef[Str] ); +after setup_finalize => sub { + my $c = shift; + + # New: Turn off new 'autoflush' flag in logger (see Catalyst::Log). + # This is needed to surpress output of debug log messages for + # static requests: + $c->log->autoflush(0) if $c->log->can('autoflush'); +}; + before prepare_action => sub { my $c = shift; my $path = $c->req->path; - my $config = $c->config->{static}; + my $config = $c->config->{'Plugin::Static::Simple'}; $path =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; @@ -54,7 +64,7 @@ before prepare_action => sub { } # Does the path have an extension? - if ( $path =~ /.*\.(\S{1,})$/xms ) { + if ( $path =~ /\.([^\/\\]+)$/m ) { # and does it exist? $c->_locate_static_file( $path ); } @@ -67,7 +77,7 @@ around dispatch => sub { return if ( $c->res->status != 200 ); if ( $c->_static_file ) { - if ( $c->config->{static}{no_logs} && $c->log->can('abort') ) { + if ( $c->config->{'Plugin::Static::Simple'}->{no_logs} && $c->log->can('abort') ) { $c->log->abort( 1 ); } return $c->_serve_static; @@ -81,7 +91,7 @@ before finalize => sub { my $c = shift; # display all log messages - if ( $c->config->{static}{debug} && scalar @{$c->_debug_msg} ) { + if ( $c->config->{'Plugin::Static::Simple'}->{debug} && scalar @{$c->_debug_msg} ) { $c->log->debug( 'Static::Simple: ' . join q{ }, @{$c->_debug_msg} ); } }; @@ -89,7 +99,23 @@ before finalize => sub { before setup_finalize => sub { my $c = shift; - my $config = $c->config->{static} ||= {}; + $c->log->warn("Deprecated 'static' config key used, please use the key 'Plugin::Static::Simple' instead") + if exists $c->config->{static}; + + if (exists $c->config->{static}->{include_path}) { + $c->config->{'Plugin::Static::Simple'}->{include_path} = [ + @{$c->config->{'Plugin::Static::Simple'}->{include_path} || []}, + @{delete $c->config->{static}->{include_path} || []} + ]; + } + + my $config + = $c->config->{'Plugin::Static::Simple'} + = $c->config->{'static'} + = Catalyst::Utils::merge_hashes( + $c->config->{'Plugin::Static::Simple'} || {}, + $c->config->{static} || {} + ); $config->{dirs} ||= []; $config->{include_path} ||= [ $c->config->{root} ]; @@ -103,9 +129,6 @@ before setup_finalize => sub { # load up a MIME::Types object, only loading types with # at least 1 file extension $config->{mime_types_obj} = MIME::Types->new( only_complete => 1 ); - - # preload the type index hash so it's not built on the first request - $config->{mime_types_obj}->create_type_index; }; # Search through all included directories for the static file @@ -117,7 +140,7 @@ sub _locate_static_file { File::Spec->no_upwards( File::Spec->splitdir( $path ) ) ); - my $config = $c->config->{static}; + my $config = $c->config->{'Plugin::Static::Simple'}; my @ipaths = @{ $config->{include_path} }; my $dpaths; my $count = 64; # maximum number of directories to search @@ -172,7 +195,7 @@ sub _locate_static_file { sub _serve_static { my $c = shift; - my $config = $c->config->{static} ||= {}; + my $config = $c->config->{'Plugin::Static::Simple'}; my $full_path = shift || $c->_static_file; my $type = $c->_ext_to_type( $full_path ); @@ -204,7 +227,7 @@ sub _serve_static { sub serve_static_file { my ( $c, $full_path ) = @_; - my $config = $c->config->{static} ||= {}; + my $config = $c->config->{'Plugin::Static::Simple'}; if ( -e $full_path ) { $c->_debug_msg( "Serving static file: $full_path" ) @@ -225,7 +248,7 @@ sub serve_static_file { sub _ext_to_type { my ( $c, $full_path ) = @_; - my $config = $c->config->{static}; + my $config = $c->config->{'Plugin::Static::Simple'}; if ( $full_path =~ /.*\.(\S{1,})$/xms ) { my $ext = $1; @@ -299,7 +322,7 @@ properly. If the plugin can not find the file, the request is dispatched to your application instead. This means you are responsible for generating a -C<404> error if your applicaton can not process the request: +C<404> error if your application can not process the request: # handled by static::simple, not dispatched to your application /images/exists.png @@ -336,7 +359,7 @@ Logging of static files is turned off by default. =head1 ADVANCED CONFIGURATION Configuration is completely optional and is specified within -Cconfig-E{static}>. If you use any of these options, +Cconfig-E{Plugin::Static::Simple}>. If you use any of these options, this module will probably feel less "simple" to you! =head2 Enabling request logging @@ -345,7 +368,7 @@ Since Catalyst 5.50, logging of static requests is turned off by default; static requests tend to clutter the log output and rarely reveal anything useful. However, if you want to enable logging of static requests, you can do so by setting -Cconfig-E{static}-E{logging}> to 1. +Cconfig-E{Plugin::Static::Simple}-E{logging}> to 1. =head2 Forcing directories into static mode @@ -354,7 +377,7 @@ that should always be served in static mode. Regular expressions may be specified using C. MyApp->config( - static => { + 'Plugin::Static::Simple' => { dirs => [ 'static', qr/^(images|css)/, @@ -371,7 +394,7 @@ added to the search path when you specify an C. You should use Cconfig-E{root}> to add it. MyApp->config( - static => { + 'Plugin::Static::Simple' => { include_path => [ '/path/to/overlay', \&incpath_generator, @@ -415,7 +438,7 @@ If you wish to define your own extensions to ignore, use the C option: MyApp->config( - static => { + 'Plugin::Static::Simple' => { ignore_extensions => [ qw/html asp php/ ], }, ); @@ -428,7 +451,7 @@ directory paths to ignore. If using C, the path will be checked against every included path. MyApp->config( - static => { + 'Plugin::Static::Simple' => { ignore_dirs => [ qw/tmpl css/ ], }, ); @@ -449,7 +472,7 @@ To override or add to the default MIME types set by the L module, you may enter your own extension to MIME type mapping. MyApp->config( - static => { + 'Plugin::Static::Simple' => { mime_types => { jpg => 'image/jpg', png => 'image/png', @@ -469,7 +492,7 @@ So a value of zero really means "don't cache at all", and any higher values will keep the file around for that long. MyApp->config( - static => { + 'Plugin::Static::Simple' => { expires => 3600, # Caching allowed for one hour. }, ); @@ -486,7 +509,7 @@ Enable additional debugging information printed in the Catalyst log. This is automatically enabled when running Catalyst in -Debug mode. MyApp->config( - static => { + 'Plugin::Static::Simple' => { debug => 1, }, ); @@ -571,6 +594,18 @@ messages. C initializes all default values. +=head1 DEPRECATIONS + +The old style of configuration using the C<'static'> config key was deprecated +in version 0.30. A warning will be issued if this is used, and the contents of +the config at this key will be merged with the newer C<'Plugin::Static::Simple'> +key. + +Be aware that if the C<'include_path'> key under C<'static'> exists at all, it +will be merged with any content of the same key under +C<'Plugin::Static::Simple'>. Be careful not to set this to a non-arrayref, +therefore. + =head1 SEE ALSO L, L,