[Catalyst-commits] r6390 - in trunk/Catalyst-Plugin-Static-Simple:
. lib/Catalyst/Plugin/Static t t/lib
andyg at dev.catalyst.perl.org
andyg at dev.catalyst.perl.org
Fri May 11 16:18:50 GMT 2007
Author: andyg
Date: 2007-05-11 16:18:49 +0100 (Fri, 11 May 2007)
New Revision: 6390
Added:
trunk/Catalyst-Plugin-Static-Simple/t/11serve_static.t
Modified:
trunk/Catalyst-Plugin-Static-Simple/Changes
trunk/Catalyst-Plugin-Static-Simple/lib/Catalyst/Plugin/Static/Simple.pm
trunk/Catalyst-Plugin-Static-Simple/t/lib/TestApp.pm
Log:
Static::Simple: Added serve_static_file patch from groditi, plus tests
Modified: trunk/Catalyst-Plugin-Static-Simple/Changes
===================================================================
--- trunk/Catalyst-Plugin-Static-Simple/Changes 2007-05-11 12:56:04 UTC (rev 6389)
+++ trunk/Catalyst-Plugin-Static-Simple/Changes 2007-05-11 15:18:49 UTC (rev 6390)
@@ -1,4 +1,6 @@
Revision history for Perl extension Catalyst::Plugin::Static::Simple
+0.17
+ - Added serve_static_file, to serve a given file as static. (groditi)
0.16 2007-04-30 15:00:00
- Allow all files in directories defined by the config option 'dirs'
Modified: trunk/Catalyst-Plugin-Static-Simple/lib/Catalyst/Plugin/Static/Simple.pm
===================================================================
--- trunk/Catalyst-Plugin-Static-Simple/lib/Catalyst/Plugin/Static/Simple.pm 2007-05-11 12:56:04 UTC (rev 6389)
+++ trunk/Catalyst-Plugin-Static-Simple/lib/Catalyst/Plugin/Static/Simple.pm 2007-05-11 15:18:49 UTC (rev 6390)
@@ -8,7 +8,7 @@
use IO::File ();
use MIME::Types ();
-our $VERSION = '0.16';
+our $VERSION = '0.17';
__PACKAGE__->mk_accessors( qw/_static_file _static_debug_message/ );
@@ -166,7 +166,7 @@
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 +195,25 @@
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 ) = @_;
@@ -426,6 +445,21 @@
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 +496,11 @@
=head1 CONTRIBUTORS
Marcus Ramberg, <mramberg at cpan.org>
+
Jesse Sheidlower, <jester at panix.com>
+Guillermo Roditi, <groditi at cpan.org>
+
=head1 THANKS
The authors of Catalyst::Plugin::Static:
Added: trunk/Catalyst-Plugin-Static-Simple/t/11serve_static.t
===================================================================
--- trunk/Catalyst-Plugin-Static-Simple/t/11serve_static.t (rev 0)
+++ trunk/Catalyst-Plugin-Static-Simple/t/11serve_static.t 2007-05-11 15:18:49 UTC (rev 6390)
@@ -0,0 +1,20 @@
+#!perl
+
+use strict;
+use warnings;
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+
+use Test::More tests => 6;
+use Catalyst::Test 'TestApp';
+
+# test getting a file via serve_static_file
+ok( my $res = request('http://localhost/serve_static'), 'request ok' );
+is( $res->code, 200, '200 ok' );
+is( $res->content_type, 'application/x-pagemaker', 'content-type ok' );
+like( $res->content, qr/serve_static/, 'content of serve_static ok' );
+
+# test getting a non-existant file via serve_static_file
+ok( $res = request('http://localhost/serve_static_404'), 'request ok' );
+is( $res->code, 404, '404 ok' );
\ No newline at end of file
Modified: trunk/Catalyst-Plugin-Static-Simple/t/lib/TestApp.pm
===================================================================
--- trunk/Catalyst-Plugin-Static-Simple/t/lib/TestApp.pm 2007-05-11 12:56:04 UTC (rev 6389)
+++ trunk/Catalyst-Plugin-Static-Simple/t/lib/TestApp.pm 2007-05-11 15:18:49 UTC (rev 6390)
@@ -2,11 +2,14 @@
use strict;
use Catalyst;
+use File::Spec::Functions;
+use FindBin;
our $VERSION = '0.01';
TestApp->config(
name => 'TestApp',
+ debug => 1,
);
my @plugins = qw/Static::Simple/;
@@ -44,4 +47,20 @@
$c->res->output( 'subtest2 ok' );
}
+sub serve_static : Local {
+ my ( $self, $c ) = @_;
+
+ my $file = catfile( $FindBin::Bin, 'lib', 'TestApp.pm' );
+
+ $c->serve_static_file( $file );
+}
+
+sub serve_static_404 : Local {
+ my ( $self, $c ) = @_;
+
+ my $file = catfile( $FindBin::Bin, 'lib', 'foo.pm' );
+
+ $c->serve_static_file( $file );
+}
+
1;
More information about the Catalyst-commits
mailing list