From: Stevan Little Date: Fri, 30 Nov 2007 05:15:14 +0000 (+0000) Subject: moving the Pid file stuff out into a role, and make a types module X-Git-Tag: 0_06~19 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=d9e417f46628d78ad60adcc7613b8841f6e24342;p=gitmo%2FMooseX-Daemonize.git moving the Pid file stuff out into a role, and make a types module --- diff --git a/lib/MooseX/Daemonize.pm b/lib/MooseX/Daemonize.pm index 00f8131..da4923c 100644 --- a/lib/MooseX/Daemonize.pm +++ b/lib/MooseX/Daemonize.pm @@ -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; diff --git a/lib/MooseX/Daemonize/PidFile.pm b/lib/MooseX/Daemonize/PidFile.pm index 4234072..169b3c3 100644 --- a/lib/MooseX/Daemonize/PidFile.pm +++ b/lib/MooseX/Daemonize/PidFile.pm @@ -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 index 0000000..eb0c136 --- /dev/null +++ b/lib/MooseX/Daemonize/Types.pm @@ -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 index 0000000..f65313f --- /dev/null +++ b/lib/MooseX/Daemonize/WithPidFile.pm @@ -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