drop namespace::autoclean
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Script / FastCGI.pm
index a67aa57..f4fd2e7 100644 (file)
@@ -1,8 +1,7 @@
 package Catalyst::Script::FastCGI;
 use Moose;
-use MooseX::Types::Moose qw/Str Bool Int/;
 use Data::OptList;
-use namespace::autoclean;
+use namespace::clean -except => [ 'meta' ];
 
 sub _plack_engine_name { 'FCGI' }
 
@@ -11,7 +10,7 @@ with 'Catalyst::ScriptRole';
 has listen => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'l',
-    isa           => Str,
+    isa           => 'Str',
     is            => 'ro',
     documentation => 'Specify a listening port/socket',
 );
@@ -19,14 +18,14 @@ has listen => (
 has pidfile => (
     traits        => [qw(Getopt)],
     cmd_aliases   => [qw/pid p/],
-    isa           => Str,
+    isa           => 'Str',
     is            => 'ro',
     documentation => 'Specify a pidfile',
 );
 
 has daemon => (
     traits        => [qw(Getopt)],
-    isa           => Bool,
+    isa           => 'Bool',
     is            => 'ro',
     cmd_aliases   => [qw/d detach/], # Eww, detach is here as we fucked it up.. Deliberately not documented
     documentation => 'Daemonize (go into the background)',
@@ -34,7 +33,7 @@ has daemon => (
 
 has manager => (
     traits        => [qw(Getopt)],
-    isa           => Str,
+    isa           => 'Str',
     is            => 'ro',
     cmd_aliases   => 'M',
     documentation => 'Use a different FastCGI process manager class',
@@ -43,7 +42,7 @@ has manager => (
 has keeperr => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'e',
-    isa           => Bool,
+    isa           => 'Bool',
     is            => 'ro',
     documentation => 'Log STDERR',
 );
@@ -51,14 +50,14 @@ has keeperr => (
 has nproc => (
     traits        => [qw(Getopt)],
     cmd_aliases   => 'n',
-    isa           => Int,
+    isa           => 'Int',
     is            => 'ro',
     documentation => 'Specify a number of child processes',
 );
 
 has proc_title => (
     traits        => [qw(Getopt)],
-    isa           => Str,
+    isa           => 'Str',
     is            => 'ro',
     lazy          => 1,
     builder       => '_build_proc_title',
@@ -75,22 +74,42 @@ sub BUILD {
     $self->proc_title;
 }
 
+# Munge the 'listen' arg so that Plack::Handler::FCGI will accept it.
+sub _listen {
+    my ($self) = @_;
+
+    if (defined (my $listen = $self->listen)) {
+        return [ $listen ];
+    } else {
+        return undef;
+    }
+}
+
 sub _plack_loader_args {
     my ($self) = shift;
-    return (
-        map { $_->[0] => $self->${ \($_->[1] ? $_->[1]->[0] : $_->[0]) } }
-        Data::OptList::mkopt([
-            qw/pidfile listen manager nproc keep_stderr proc_title/,
-            detach     => [ 'daemon' ],
-        ])
-    );
+
+    my $opts = Data::OptList::mkopt([
+      qw/manager nproc proc_title/,
+            pid             => [ 'pidfile' ],
+            daemonize       => [ 'daemon' ],
+            keep_stderr     => [ 'keeperr' ],
+            listen          => [ '_listen' ],
+        ]);
+
+    my %args = map { $_->[0] => $self->${ \($_->[1] ? $_->[1]->[0] : $_->[0]) } } @$opts;
+
+    # Plack::Handler::FCGI thinks manager => undef means "use no manager".
+    delete $args{'manager'} unless defined $args{'manager'};
+
+    return %args;
 }
 
-sub _application_args {
-    my ($self) = shift;
+around _application_args => sub {
+    my ($orig, $self) = @_;
     return (
         $self->listen,
         {
+            %{ $self->$orig },
             nproc       => $self->nproc,
             pidfile     => $self->pidfile,
             manager     => $self->manager,
@@ -99,9 +118,10 @@ sub _application_args {
             proc_title  => $self->proc_title,
         }
     );
-}
+};
 
 __PACKAGE__->meta->make_immutable;
+1;
 
 =head1 NAME
 
@@ -134,6 +154,10 @@ Catalyst::Script::FastCGI - The FastCGI Catalyst Script
 
 Run a Catalyst application as fastcgi.
 
+=head1 SEE ALSO
+
+L<Catalyst::ScriptRunner>
+
 =head1 AUTHORS
 
 Catalyst Contributors, see Catalyst.pm