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
=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
$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;
$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;
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};
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};
use Socket;
use URI;
+require Catalyst;
+
my $class;
$ENV{CATALYST_ENGINE} = 'CGI';
$ENV{CATALYST_TEST} = 1;
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 {
=cut
sub server {
- my $port = shift;
+ my ( $port, $script ) = @_;
# Listen
my $tcp = getprotobyname('tcp');
$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;
}
}