moving the Pid file stuff out into a role, and make a types module
Stevan Little [Fri, 30 Nov 2007 05:15:14 +0000 (05:15 +0000)]
lib/MooseX/Daemonize.pm
lib/MooseX/Daemonize/PidFile.pm
lib/MooseX/Daemonize/Types.pm [new file with mode: 0644]
lib/MooseX/Daemonize/WithPidFile.pm [new file with mode: 0644]

index 00f8131..da4923c 100644 (file)
@@ -1,18 +1,15 @@
 package MooseX::Daemonize;
 use strict;    # because Kwalitee is pedantic
 use Moose::Role;
-use MooseX::Types::Path::Class;
-use Moose::Util::TypeConstraints;
 
-our $VERSION = 0.05;
+use MooseX::Daemonize::Types;
 
-use Carp 'carp';
-use Proc::Daemon;
-use MooseX::Daemonize::PidFile;
+our $VERSION = 0.05;
 
 with qw[
     MooseX::Daemonize::Core
     MooseX::Daemonize::WithSignalHandling
+    MooseX::Daemonize::WithPidFile    
     MooseX::Getopt
 ];
 
@@ -27,40 +24,22 @@ has progname => (
     },
 );
 
-has basedir => (
+has pidbase => (
     isa      => 'Path::Class::Dir',
     is       => 'ro',
     coerce   => 1,
-    required => 1,
+    required => 1,    
     lazy     => 1,
-    default  => sub { Path::Class::Dir->new('/') },
+    default  => sub { Path::Class::Dir->new('var', 'run') },
 );
 
-has pidbase => (
+has basedir => (
     isa      => 'Path::Class::Dir',
     is       => 'ro',
     coerce   => 1,
-    required => 1,    
+    required => 1,
     lazy     => 1,
-    default  => sub { Path::Class::Dir->new('var', 'run') },
-);
-
-coerce 'MooseX::Daemonize::PidFile' 
-    => from 'Str' 
-        => via { MooseX::Daemonize::PidFile->new( file => $_ ) };
-
-has pidfile => (
-    isa       => 'MooseX::Daemonize::PidFile',
-    is        => 'rw',
-    lazy      => 1,
-    required  => 1,
-    coerce    => 1,
-    predicate => 'has_pidfile',
-    default   => sub {
-        my $file = $_[0]->pidbase . '/' . $_[0]->progname . '.pid';
-        confess "Cannot write to $file" unless (-e $file ? -w $file : -w $_[0]->pidbase);
-        MooseX::Daemonize::PidFile->new( file => $file );
-    },
+    default  => sub { Path::Class::Dir->new('/') },
 );
 
 has foreground => (
@@ -71,13 +50,19 @@ has foreground => (
     default     => sub { 0 },
 );
 
-
 has stop_timeout => (
     isa     => 'Int',
     is      => 'rw',
     default => sub { 2 }
 );
 
+sub init_pidfile {
+    my $self = shift;
+    my $file = $self->pidbase . '/' . $self->progname . '.pid';
+    confess "Cannot write to $file" unless (-e $file ? -w $file : -w $self->pidbase);
+    MooseX::Daemonize::PidFile->new( file => $file );
+}
+
 sub start {
     my ($self) = @_;
     
@@ -169,7 +154,7 @@ $_kill = sub {
     return unless ( CORE::kill 0 => $pid or $!{EPERM} );
 
     # IF it is still running
-    carp "$pid doesn't seem to want to die.";     # AHH EVIL DEAD!
+    Carp::carp "$pid doesn't seem to want to die.";     # AHH EVIL DEAD!
 };
 
 1;
index 4234072..169b3c3 100644 (file)
@@ -1,7 +1,8 @@
 package MooseX::Daemonize::PidFile;
 use strict;    # because Kwalitee is pedantic
 use Moose;
-use MooseX::Types::Path::Class;
+
+use MooseX::Daemonize::Types;
 
 our $VERSION = '0.01';
 
diff --git a/lib/MooseX/Daemonize/Types.pm b/lib/MooseX/Daemonize/Types.pm
new file mode 100644 (file)
index 0000000..eb0c136
--- /dev/null
@@ -0,0 +1,17 @@
+package MooseX::Daemonize::Types;
+
+use Moose::Util::TypeConstraints;
+use MooseX::Types::Path::Class;
+use MooseX::Daemonize::PidFile; # need this for the coercion below
+
+our $VERSION = 0.01;
+
+coerce 'MooseX::Daemonize::PidFile' 
+    => from 'Str' 
+        => via { MooseX::Daemonize::PidFile->new( file => $_ ) }
+    => from 'Path::Class::File' 
+        => via { MooseX::Daemonize::PidFile->new( file => $_ ) };
+
+1;
+
+__END__
\ No newline at end of file
diff --git a/lib/MooseX/Daemonize/WithPidFile.pm b/lib/MooseX/Daemonize/WithPidFile.pm
new file mode 100644 (file)
index 0000000..f65313f
--- /dev/null
@@ -0,0 +1,24 @@
+package MooseX::Daemonize::WithPidFile;
+use strict;
+use Moose::Role;
+
+use MooseX::Daemonize::Types;
+use MooseX::Daemonize::PidFile;
+
+our $VERSION = 0.01;
+
+requires 'init_pidfile';
+
+has pidfile => (
+    isa       => 'MooseX::Daemonize::PidFile',
+    is        => 'rw',
+    lazy      => 1,
+    required  => 1,
+    coerce    => 1,
+    predicate => 'has_pidfile',
+    builder   => 'init_pidfile',
+);
+
+1;
+
+__END__
\ No newline at end of file