added script/cgi-server.pl
Sebastian Riedel [Sat, 19 Mar 2005 21:11:43 +0000 (21:11 +0000)]
Changes
lib/Catalyst.pm
lib/Catalyst/Engine.pm
lib/Catalyst/Helper.pm
lib/Catalyst/Test.pm

diff --git a/Changes b/Changes
index db862ae..92df5eb 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,7 +2,9 @@ This file documents the revision history for Perl extension Catalyst.
 
 4.28  XXX XXX XX XX:00:00 2005
         - fixed isa tree (Christian Hansen)
-        - Reworked documentation (Andrew Ford <A.Ford@ford-mason.co.uk>)
+        - added script/cgi-server.pl, so no more server restarting after
+          code changes
+        - reworked documentation (Andrew Ford <A.Ford@ford-mason.co.uk>)
 
 4.27  Sat Mar 19 01:00:00 2005
         - debug message for parameters
index d205183..98c8776 100644 (file)
@@ -215,9 +215,10 @@ Sebastian Riedel, C<sri@oook.de>
 
 =head1 THANK YOU
 
-Andrew Ruthven, Christian Hansen, Christopher Hicks, Danijel Milicevic,
-David Naughton, Gary Ashton Jones, Jesse Sheidlower, Johan Lindstrom,
-Marcus Ramberg, Tatsuhiko Miyagawa and all the others who've helped.
+Andrew Ford, Andrew Ruthven, Christian Hansen, Christopher Hicks,
+Danijel Milicevic, David Naughton, Gary Ashton Jones, Jesse Sheidlower,
+Johan Lindstrom, Marcus Ramberg, Tatsuhiko Miyagawa and all the others
+who've helped.
 
 =head1 LICENSE
 
index 260c9e3..7395270 100644 (file)
@@ -491,8 +491,8 @@ sub prepare {
     $c->prepare_path;
     $c->prepare_cookies;
     $c->prepare_headers;
-    my $method = $c->req->method;
-    my $path   = $c->req->path;
+    my $method = $c->req->method || '';
+    my $path   = $c->req->path   || '';
     $c->log->debug(qq/"$method" request for "$path"/) if $c->debug;
     $c->prepare_action;
     $c->prepare_parameters;
index 04af836..77703b6 100644 (file)
@@ -38,7 +38,9 @@ sub mk_app {
     $self->_mk_readme;
     $self->_mk_changes;
     $self->_mk_apptest;
+    $self->_mk_cgi;
     $self->_mk_server;
+    $self->_mk_cgiserver;
     $self->_mk_test;
     $self->_mk_create;
     return 1;
@@ -316,6 +318,51 @@ all_pod_coverage_ok();
 EOF
 }
 
+sub _mk_cgi {
+    my $self   = shift;
+    my $name   = $self->{name};
+    my $script = $self->{script};
+    $self->mk_file( "$script\/cgi.pl", <<"EOF");
+$Config{startperl} -w
+
+use strict;
+use FindBin;
+use lib "\$FindBin::Bin/../lib";
+use $name;
+
+$name->run;
+
+1;
+__END__
+
+=head1 NAME
+
+cgi - Catalyst CGI
+
+=head1 SYNOPSIS
+
+See L<Catalyst::Manual>
+
+=head1 DESCRIPTION
+
+Run a Catalyst application as cgi.
+
+=head1 AUTHOR
+
+Sebastian Riedel, C<sri\@oook.de>
+
+=head1 COPYRIGHT
+
+Copyright 2004 Sebastian Riedel. All rights reserved.
+
+This library is free software. You can redistribute it and/or modify it under
+the same terms as perl itself.
+
+=cut
+EOF
+    chmod 0700, "$script/cgi.pl";
+}
+
 sub _mk_server {
     my $self   = shift;
     my $name   = $self->{name};
@@ -378,6 +425,72 @@ EOF
     chmod 0700, "$script/server.pl";
 }
 
+sub _mk_cgiserver {
+    my $self   = shift;
+    my $name   = $self->{name};
+    my $script = $self->{script};
+    $self->mk_file( "$script\/cgi-server.pl", <<"EOF");
+$Config{startperl} -w
+
+use strict;
+use Getopt::Long;
+use Pod::Usage;
+use FindBin;
+use File::Spec;
+use Catalyst::Test;
+
+my \$help = 0;
+my \$port = 3000;
+
+GetOptions( 'help|?' => \\\$help, 'port=s' => \\\$port );
+
+pod2usage(1) if \$help;
+
+Catalyst::Test::server(
+    \$port, File::Spec->catfile( \$FindBin::Bin, 'cgi.pl' ) );
+
+1;
+__END__
+
+=head1 NAME
+
+cgi-server - Catalyst CGI Testserver
+
+=head1 SYNOPSIS
+
+cgi-server.pl [options]
+
+ Options:
+   -? -help    display this help and exits
+   -p -port    port (defaults to 3000)
+
+ See also:
+   perldoc Catalyst::Manual
+   perldoc Catalyst::Manual::Intro
+
+=head1 DESCRIPTION
+
+Run a Catalyst CGI Testserver for this application.
+
+Similar to the regular server but doesn't require a restart
+after code changes!
+
+=head1 AUTHOR
+
+Sebastian Riedel, C<sri\@oook.de>
+
+=head1 COPYRIGHT
+
+Copyright 2004 Sebastian Riedel. All rights reserved.
+
+This library is free software. You can redistribute it and/or modify it under
+the same terms as perl itself.
+
+=cut
+EOF
+    chmod 0700, "$script/cgi-server.pl";
+}
+
 sub _mk_test {
     my $self   = shift;
     my $name   = $self->{name};
index 0b3349f..fd53e18 100644 (file)
@@ -6,6 +6,8 @@ use HTTP::Response;
 use Socket;
 use URI;
 
+require Catalyst;
+
 my $class;
 $ENV{CATALYST_ENGINE} = 'CGI';
 $ENV{CATALYST_TEST}   = 1;
@@ -59,15 +61,16 @@ Returns a C<HTTP::Response> object.
 
 sub import {
     my $self = shift;
-    $class = shift;
-    $class->require;
-    unless ( $INC{'Test/Builder.pm'} ) {
-        die qq/Couldn't load "$class", "$@"/ if $@;
+    if ( $class = shift ) {
+        $class->require;
+        unless ( $INC{'Test/Builder.pm'} ) {
+            die qq/Couldn't load "$class", "$@"/ if $@;
+        }
+        my $caller = caller(0);
+        no strict 'refs';
+        *{"$caller\::request"} = \&request;
+        *{"$caller\::get"} = sub { request(@_)->content };
     }
-    my $caller = caller(0);
-    no strict 'refs';
-    *{"$caller\::request"} = \&request;
-    *{"$caller\::get"} = sub { request(@_)->content };
 }
 
 sub request {
@@ -96,7 +99,7 @@ Starts a testserver.
 =cut
 
 sub server {
-    my $port = shift;
+    my ( $port, $script ) = @_;
 
     # Listen
     my $tcp = getprotobyname('tcp');
@@ -164,7 +167,7 @@ sub server {
         $ENV{QUERY_STRING}    = $query_string || '';
         $ENV{CONTENT_TYPE}    ||= 'multipart/form-data';
         $ENV{SERVER_SOFTWARE} ||= "Catalyst/$Catalyst::VERSION";
-        $class->run;
+        $script ? print STDOUT `$script` : $class->run;
     }
 }