X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FDaemonize.pm;h=ffae57707438a5bcc09a6e94ae371a91ec582422;hb=2eced27121e8557fe773f6f8804786f29f5660c1;hp=2db7c99f28c9554c3f32eab22347283496a04b6b;hpb=637573c4c59c8811e7759e2f8233076d4c479f62;p=gitmo%2FMooseX-Daemonize.git
diff --git a/lib/MooseX/Daemonize.pm b/lib/MooseX/Daemonize.pm
index 2db7c99..ffae577 100644
--- a/lib/MooseX/Daemonize.pm
+++ b/lib/MooseX/Daemonize.pm
@@ -1,13 +1,14 @@
package MooseX::Daemonize;
use strict; # because Kwalitee is pedantic
use Moose::Role;
+use MooseX::Types::Path::Class;
+use Moose::Util::TypeConstraints;
-our $VERSION = 0.04;
-use Carp;
-use Proc::Daemon;
+our $VERSION = 0.05;
-use File::Pid;
-use Moose::Util::TypeConstraints;
+use Carp 'carp';
+use Proc::Daemon;
+use MooseX::Daemonize::PidFile;
with qw(MooseX::Getopt);
@@ -23,27 +24,29 @@ has progname => (
);
has basedir => (
- isa => 'Str',
+ isa => 'Path::Class::Dir',
is => 'ro',
+ coerce => 1,
required => 1,
lazy => 1,
- default => sub { return '/' },
+ default => sub { Path::Class::Dir->new('/') },
);
has pidbase => (
- isa => 'Str',
+ isa => 'Path::Class::Dir',
is => 'ro',
+ coerce => 1,
+ required => 1,
lazy => 1,
- required => 1,
- default => sub { return '/var/run' },
+ default => sub { Path::Class::Dir->new('var', 'run') },
);
-subtype 'Pidfile' => as 'Object' => where { $_->isa('File::Pid') };
-
-coerce 'Pidfile' => from 'Str' => via { File::Pid->new( { file => $_, } ); };
+coerce 'MooseX::Daemonize::PidFile'
+ => from 'Str'
+ => via { MooseX::Daemonize::PidFile->new( file => $_ ) };
has pidfile => (
- isa => 'Pidfile',
+ isa => 'MooseX::Daemonize::PidFile',
is => 'rw',
lazy => 1,
required => 1,
@@ -51,20 +54,19 @@ has pidfile => (
predicate => 'has_pidfile',
default => sub {
my $file = $_[0]->pidbase . '/' . $_[0]->progname . '.pid';
- die "Cannot write to $file" unless (-e $file ? -w $file : -w $_[0]->pidbase);
- File::Pid->new( { file => $file } );
+ confess "Cannot write to $file" unless (-e $file ? -w $file : -w $_[0]->pidbase);
+ MooseX::Daemonize::PidFile->new( file => $file );
},
handles => {
check => 'running',
save_pid => 'write',
remove_pid => 'remove',
get_pid => 'pid',
- _pidfile => 'file',
},
);
has foreground => (
- metaclass => 'MooseX::Getopt::Meta::Attribute',
+ metaclass => 'Getopt',
cmd_aliases => 'f',
isa => 'Bool',
is => 'ro',
@@ -80,7 +82,7 @@ has is_daemon => (
has stop_timeout => (
isa => 'Int',
is => 'rw',
- default => 2
+ default => sub { 2 }
);
sub daemonize {
@@ -92,7 +94,9 @@ sub daemonize {
sub start {
my ($self) = @_;
+
confess "instance already running" if $self->check;
+
$self->daemonize unless $self->foreground;
return unless $self->is_daemon;
@@ -225,17 +229,17 @@ to do that.
=over
-=item progname Str
+=item progname Path::Class::Dir | Str
The name of our daemon, defaults to $self->meta->name =~ s/::/_/;
-=item pidbase Str
+=item pidbase Path::Class::Dir | Str
The base for our bid, defaults to /var/run/$progname
-=item pidfile Str
+=item pidfile MooseX::Daemonize::PidFile | Str
-The file we store our PID in, defaults to /var/run/$progname/
+The file we store our PID in, defaults to /var/run/$progname
=item foreground Bool
@@ -319,7 +323,7 @@ The C method from L
the module is part of the standard Perl distribution, part of the
module's distribution, or must be installed separately. ]
-Obviously L, also L, L, L
+Obviously L, and L
=head1 INCOMPATIBILITIES