X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FPlugin%2FStatic%2FSimple.pm;h=b83215b4db8ac8466cd64038a5c96e8d99198875;hb=8223995544e9031e40cac6e1d06ffc1ac8d8a275;hp=1dc8eca42fa67fd7e4e73296af67191b82f04906;hpb=b1d96e3e36e4f09e374cee63f84a62630e173828;p=catagits%2FCatalyst-Plugin-Static-Simple.git
diff --git a/lib/Catalyst/Plugin/Static/Simple.pm b/lib/Catalyst/Plugin/Static/Simple.pm
index 1dc8eca..b83215b 100644
--- a/lib/Catalyst/Plugin/Static/Simple.pm
+++ b/lib/Catalyst/Plugin/Static/Simple.pm
@@ -7,12 +7,12 @@ use File::stat;
use MIME::Types;
use NEXT;
-our $VERSION = '0.06';
+our $VERSION = '0.09';
-__PACKAGE__->mk_classdata( qw/_mime_types/ );
+__PACKAGE__->mk_classdata( qw/_static_mime_types/ );
__PACKAGE__->mk_accessors( qw/_static_file
- _apache_mode
- _debug_message/ );
+ _static_apache_mode
+ _static_debug_message/ );
# prepare_action is used to first check if the request path is a static file.
# If so, we skip all other prepare_action steps to improve performance.
@@ -46,20 +46,23 @@ sub prepare_action {
return if ( $c->_locate_static_file );
}
- return $c->NEXT::prepare_action(@_);
+ return $c->NEXT::ACTUAL::prepare_action(@_);
}
# dispatch takes the file found during prepare_action and serves it
sub dispatch {
my $c = shift;
- return undef if ( $c->res->status == 404 );
+ return if ( $c->res->status != 200 );
if ( $c->_static_file ) {
+ if ( $c->config->{static}->{no_logs} && $c->log->can('abort') ) {
+ $c->log->abort( 1 );
+ }
return $c->_serve_static;
}
else {
- return $c->NEXT::dispatch(@_);
+ return $c->NEXT::ACTUAL::dispatch(@_);
}
}
@@ -69,14 +72,13 @@ sub finalize {
# display all log messages
if ( $c->config->{static}->{debug} && scalar @{$c->_debug_msg} ) {
- $c->log->debug( "Static::Simple: Serving " .
- join( " ", @{$c->_debug_msg} )
- );
+ $c->log->debug( "Static::Simple: Serving " .
+ join( " ", @{$c->_debug_msg} ) );
}
# return DECLINED when under mod_perl
- if ( $c->config->{static}->{use_apache} && $c->_apache_mode ) {
- my $engine = $c->_apache_mode;
+ if ( $c->config->{static}->{use_apache} && $c->_static_apache_mode ) {
+ my $engine = $c->_static_apache_mode;
no strict 'subs';
if ( $engine == 13 ) {
return Apache::Constants::DECLINED;
@@ -94,7 +96,7 @@ sub finalize {
return $c->finalize_headers;
}
- return $c->NEXT::finalize(@_);
+ return $c->NEXT::ACTUAL::finalize(@_);
}
sub setup {
@@ -107,12 +109,16 @@ sub setup {
$c->config->{static}->{mime_types} ||= {};
$c->config->{static}->{use_apache} ||= 0;
$c->config->{static}->{debug} ||= $c->debug;
+ if ( ! defined $c->config->{static}->{no_logs} ) {
+ $c->config->{static}->{no_logs} = 1;
+ }
# load up a MIME::Types object, only loading types with
# at least 1 file extension
- $c->_mime_types( MIME::Types->new( only_complete => 1 ) );
+ $c->_static_mime_types( MIME::Types->new( only_complete => 1 ) );
+
# preload the type index hash so it's not built on the first request
- $c->_mime_types->create_type_index;
+ $c->_static_mime_types->create_type_index;
}
# Search through all included directories for the static file
@@ -147,7 +153,7 @@ sub _locate_static_file {
}
}
- return undef;
+ return;
}
sub _serve_static {
@@ -184,8 +190,8 @@ sub _serve_static {
else {
$c->_debug_msg( "DECLINED to Apache" )
if ( $c->config->{static}->{debug} );
- $c->_apache_mode( $engine );
- return undef;
+ $c->_static_apache_mode( $engine );
+ return;
}
}
}
@@ -215,15 +221,14 @@ sub _serve_static {
# looks up the correct MIME type for the current file extension
sub _ext_to_type {
my $c = shift;
-
my $path = $c->req->path;
- my $type;
if ( $path =~ /.*\.(\S{1,})$/xms ) {
my $ext = $1;
my $user_types = $c->config->{static}->{mime_types};
- if ( $type = $user_types->{$ext}
- || $c->_mime_types->mimeTypeOf( $ext ) ) {
+ my $type = $user_types->{$ext}
+ || $c->_static_mime_types->mimeTypeOf( $ext );
+ if ( $type ) {
$c->_debug_msg( "as $type" )
if ( $c->config->{static}->{debug} );
return $type;
@@ -244,15 +249,15 @@ sub _ext_to_type {
sub _debug_msg {
my ( $c, $msg ) = @_;
- if ( !defined $c->_debug_message ) {
- $c->_debug_message( [] );
+ if ( !defined $c->_static_debug_message ) {
+ $c->_static_debug_message( [] );
}
if ( $msg ) {
- push @{ $c->_debug_message }, $msg;
+ push @{ $c->_static_debug_message }, $msg;
}
- return $c->_debug_message;
+ return $c->_static_debug_message;
}
1;
@@ -291,9 +296,14 @@ Configuration is completely optional and is specified within
MyApp->config->{static}. If you use any of these options, the module will
probably feel less "simple" to you!
-=over 4
+=head2 Aborting request logging
+
+Since Catalyst 5.50, there has been added support for dropping logging for a
+request. This is enabled by default for static files, as static requests tend
+to clutter the log output. However, if you want logging of static requests,
+you can enable it by setting MyApp->config->{static}->{no_logs} to 0.
-=item Forcing directories into static mode
+=head2 Forcing directories into static mode
Define a list of top-level directories beneath your 'root' directory that
should always be served in static mode. Regular expressions may be
@@ -304,7 +314,7 @@ specified using qr//.
qr/^(images|css)/,
];
-=item Including additional directories (experimental!)
+=head2 Including additional directories
You may specify a list of directories in which to search for your static
files. The directories will be searched in order and will return the first
@@ -343,7 +353,7 @@ For example:
}
}
-=item Custom MIME types
+=head2 Custom MIME types
To override or add to the default MIME types set by the MIME::Types module,
you may enter your own extension to MIME type mapping.
@@ -352,8 +362,8 @@ you may enter your own extension to MIME type mapping.
jpg => 'image/jpg',
png => 'image/png',
};
-
-=item Apache integration and performance
+
+=head2 Apache integration and performance
Optionally, when running under mod_perl, Static::Simple can return DECLINED
on static files to allow Apache to serve the file. A check is first done to
@@ -377,8 +387,8 @@ from Apache by defining a Location block similar to the following:
SetHandler default-handler
-
-=item Bypassing other plugins
+
+=head2 Bypassing other plugins
This plugin checks for a static file in the prepare_action stage. If the
request is for a static file, it will bypass all remaining prepare_action
@@ -390,15 +400,13 @@ to run even on static files, list them before Static::Simple.
Currently, work done by plugins in any other prepare method will execute
normally.
-=item Debugging information
+=head2 Debugging information
Enable additional debugging information printed in the Catalyst log. This
is automatically enabled when running Catalyst in -Debug mode.
MyApp->config->{static}->{debug} = 1;
-=back
-
=head1 SEE ALSO
L, L,
@@ -408,6 +416,10 @@ L
Andy Grundman,
+=head1 CONTRIBUTORS
+
+Marcus Ramberg,
+
=head1 THANKS
The authors of Catalyst::Plugin::Static: