keep namespaces clean
[gitmo/MooseX-Daemonize.git] / lib / MooseX / Daemonize / WithPidFile.pm
1 use strict;
2 use warnings;
3 package MooseX::Daemonize::WithPidFile;
4
5 use MooseX::Getopt; # to load the Getopt metaclass
6 use Moose::Role;
7 use namespace::autoclean;
8
9 use MooseX::Daemonize::Pid::File;
10
11 with 'MooseX::Daemonize::Core';
12
13 requires 'init_pidfile';
14
15 has pidfile => (
16     # NOTE:
17     # this should always be accessible
18     # from the command line IMO
19     # - SL
20     metaclass => 'Getopt',
21     isa       => 'MooseX::Daemonize::Pid::File',
22     is        => 'rw',
23     lazy      => 1,
24     coerce    => 1,
25     predicate => 'has_pidfile',
26     builder   => 'init_pidfile',
27 );
28
29 after 'daemonize' => sub {
30     my $self = shift;
31     # NOTE:
32     # make sure that we do not have
33     # any bad PID values stashed around
34     # - SL
35     $self->pidfile->clear_pid;
36     if ($self->is_daemon) {
37         $self->pidfile->write;
38     }
39 };
40
41 1;
42
43 __END__
44
45 =pod
46
47 =head1 NAME
48
49 MooseX::Daemonize::WithPidFile - A Role with the core daemonization and pidfile management
50
51 =head1 SYNOPSIS
52
53   package My::Daemon;
54   use Moose;
55
56   with 'MooseX::Daemonize::WithPidFile';
57
58   sub start {
59       my $self = shift;
60       # daemonize me ...
61       $self->daemonize; # << this will write the pidfile for you
62       # return from the parent,...
63       return unless $self->is_daemon;
64       # but continue on in the child (daemon)
65   }
66
67 =head1 DESCRIPTION
68
69 This is a slightly extended basic daemonization Role, it provides
70 Pidfile management along with the core daemonization features
71 found in L<MooseX::Daemonize::Core>.
72
73 =head1 ATTRIBUTES
74
75 =over
76
77 =item I<pidfile (is => rw, isa => MooseX::Daemonize::Pid::File)>
78
79 This attribute holds the L<MooseX::Daemonize::Pid::File> object used
80 to manage the Pidfile. It will initialize the object using the
81 C<init_pidfile> method (which is required by this role).
82
83 =back
84
85 =head1 REQUIRED METHODS
86
87 =over 4
88
89 =item I<init_pidfile>
90
91 This method is used to build the I<pidfile> attribute's object. It should
92 return a L<MooseX::Daemonize::Pid::File> object.
93
94 =item B<has_pidfile>
95
96 This is a predicate method to tell you if your I<pidfile> attribute has
97 been initialized yet.
98
99 =back
100
101 =head1 METHODS
102
103 =over 4
104
105 =item B<daemonize>
106
107 This adds an C<after> method modifier to the C<daemonize> method (from
108 L<MooseX::Daemonize::Core>) and handles writing your Pidfile for you.
109
110 =item B<meta>
111
112 The C<meta()> method from L<Class::MOP::Class>
113
114 =back
115
116 =head1 DEPENDENCIES
117
118 L<Moose::Role>, L<MooseX::Getopt> and L<MooseX::Daemonize::Pid::File>
119
120 =head1 INCOMPATIBILITIES
121
122 None reported.
123
124 =head1 BUGS AND LIMITATIONS
125
126 No bugs have been reported.
127
128 Please report any bugs or feature requests to
129 C<bug-acme-dahut-call@rt.cpan.org>, or through the web interface at
130 L<http://rt.cpan.org>.
131
132 =head1 AUTHOR
133
134 Stevan Little  C<< <stevan.little@iinteractive.com> >>
135
136 =head1 LICENCE AND COPYRIGHT
137
138 Copyright (c) 2007-2011, Chris Prather C<< <perigrin@cpan.org> >>. All rights
139 reserved.
140
141 Portions heavily borrowed from L<Proc::Daemon> which is copyright Earl Hood.
142
143 This module is free software; you can redistribute it and/or
144 modify it under the same terms as Perl itself. See L<perlartistic>.
145
146 =head1 DISCLAIMER OF WARRANTY
147
148 BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
149 FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
150 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
151 PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
152 EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
153 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
154 ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
155 YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
156 NECESSARY SERVICING, REPAIR, OR CORRECTION.
157
158 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
159 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
160 REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
161 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
162 OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
163 THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
164 RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
165 FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
166 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
167 SUCH DAMAGES.
168
169 =cut