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'
use IO::File ();
use MIME::Types ();
-our $VERSION = '0.16';
+our $VERSION = '0.17';
__PACKAGE__->mk_accessors( qw/_static_file _static_debug_message/ );
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;
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 ) = @_;
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.
=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:
--- /dev/null
+#!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
\r
use strict;\r
use Catalyst;\r
+use File::Spec::Functions;\r
+use FindBin;\r
\r
our $VERSION = '0.01';\r
\r
TestApp->config(\r
name => 'TestApp',\r
+ debug => 1,\r
);\r
\r
my @plugins = qw/Static::Simple/;\r
$c->res->output( 'subtest2 ok' );\r
}\r
\r
+sub serve_static : Local {\r
+ my ( $self, $c ) = @_;\r
+ \r
+ my $file = catfile( $FindBin::Bin, 'lib', 'TestApp.pm' );\r
+ \r
+ $c->serve_static_file( $file );\r
+}\r
+\r
+sub serve_static_404 : Local {\r
+ my ( $self, $c ) = @_;\r
+ \r
+ my $file = catfile( $FindBin::Bin, 'lib', 'foo.pm' );\r
+ \r
+ $c->serve_static_file( $file );\r
+}\r
+\r
1;\r