Static::Simple 0.19, fixed a test that fails on some systems
[catagits/Catalyst-Plugin-Static-Simple.git] / lib / Catalyst / Plugin / Static / Simple.pm
index f4f56bc..95de6b0 100644 (file)
@@ -8,7 +8,7 @@ use File::Spec ();
 use IO::File ();
 use MIME::Types ();
 
-our $VERSION = '0.16';
+our $VERSION = '0.19';
 
 __PACKAGE__->mk_accessors( qw/_static_file _static_debug_message/ );
 
@@ -92,6 +92,7 @@ sub setup {
     $config->{ignore_dirs} ||= [];
     $config->{debug} ||= $c->debug;
     $config->{no_logs} = 1 unless defined $config->{no_logs};
+    $config->{no_logs} = 0 if $config->{logging};
     
     # load up a MIME::Types object, only loading types with
     # at least 1 file extension
@@ -166,7 +167,7 @@ sub _locate_static_file {
 sub _serve_static {
     my $c = shift;
            
-    my $full_path = $c->_static_file;
+    my $full_path = shift || $c->_static_file;
     my $type      = $c->_ext_to_type( $full_path );
     my $stat      = stat $full_path;
 
@@ -195,6 +196,25 @@ sub _serve_static {
     return 1;
 }
 
+sub serve_static_file {
+    my ( $c, $full_path ) = @_;
+
+    my $config = $c->config->{static} ||= {};
+    
+    if ( -e $full_path ) {
+        $c->_debug_msg( "Serving static file: $full_path" )
+            if $config->{debug};
+    }
+    else {
+        $c->_debug_msg( "404: file not found: $full_path" )
+            if $config->{debug};
+        $c->res->status( 404 );
+        return;
+    }
+
+    $c->_serve_static( $full_path );
+}
+
 # looks up the correct MIME type for the current file extension
 sub _ext_to_type {
     my ( $c, $full_path ) = @_;
@@ -303,7 +323,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
-C<MyApp-E<gt>config-E<gt>{static}-E<gt>{no_logs}> to 0.
+C<MyApp-E<gt>config-E<gt>{static}-E<gt>{logging}> to 1.
 
 =head2 Forcing directories into static mode
 
@@ -426,6 +446,21 @@ through Catalyst. You can leave Static::Simple as part of your
 application, and it will continue to function on a development server,
 or using Catalyst's built-in server.
 
+=head1 PUBLIC METHODS
+
+=head2 serve_static_file $file_path
+
+Will serve the file located in $file_path statically. This is useful when
+you need to  autogenerate them if they don't exist, or they are stored in a model.
+
+    package MyApp::Controller::User;
+
+    sub curr_user_thumb : PathPart("my_thumbnail.png") {
+        my ( $self, $c ) = @_;
+        my $file_path = $c->user->picture_thumbnail_path;
+        $c->serve_static_file($file_path);
+    }
+
 =head1 INTERNAL EXTENDED METHODS
 
 Static::Simple extends the following steps in the Catalyst process.
@@ -462,8 +497,11 @@ Andy Grundman, <andy@hybridized.org>
 =head1 CONTRIBUTORS
 
 Marcus Ramberg, <mramberg@cpan.org>
+
 Jesse Sheidlower, <jester@panix.com>
 
+Guillermo Roditi, <groditi@cpan.org>
+
 =head1 THANKS
 
 The authors of Catalyst::Plugin::Static: