keep namespaces clean
[gitmo/MooseX-Daemonize.git] / lib / MooseX / Daemonize / Pid / File.pm
1 use strict;
2 use warnings;
3 package MooseX::Daemonize::Pid::File;
4
5 use Moose;
6 use Moose::Util::TypeConstraints;
7
8 use MooseX::Types::Path::Class;
9 use MooseX::Getopt::OptionTypeMap;
10 use namespace::autoclean;
11
12 # NOTE:
13 # set up some basic coercions
14 # that will come in handy
15 # - SL
16 coerce 'MooseX::Daemonize::Pid::File'
17     => from 'Str'
18         => via { MooseX::Daemonize::Pid::File->new( file => $_ ) }
19     => from 'ArrayRef'
20         => via { MooseX::Daemonize::Pid::File->new( file => $_ ) }
21     => from 'Path::Class::File'
22         => via { MooseX::Daemonize::Pid::File->new( file => $_ ) };
23
24 # NOTE:
25 # make sure this class plays
26 # well with MooseX::Getopt
27 # - SL
28 MooseX::Getopt::OptionTypeMap->add_option_type_to_map(
29     'MooseX::Daemonize::Pid::File' => '=s',
30 );
31
32 extends 'MooseX::Daemonize::Pid';
33
34 has '+pid' => (
35     default => sub {
36         my $self = shift;
37         $self->does_file_exist
38             ? $self->file->slurp(chomp => 1)
39             : $$
40     }
41 );
42
43 has 'file' => (
44     is       => 'ro',
45     isa      => 'Path::Class::File',
46     coerce   => 1,
47     required => 1,
48     handles  => [ 'remove' ]
49 );
50
51 sub does_file_exist { -s (shift)->file }
52
53 sub write {
54     my $self = shift;
55     my $fh = $self->file->openw;
56     $fh->print($self->pid . "\n");
57     $fh->close;
58 }
59
60 override 'is_running' => sub {
61     return 0 unless (shift)->does_file_exist;
62     super();
63 };
64
65 1;
66
67 __END__
68
69 =pod
70
71 =head1 NAME
72
73 MooseX::Daemonize::Pid::File - PID file management for MooseX::Daemonize
74
75 =head1 DESCRIPTION
76
77 This object extends L<MooseX::Daemonize::Pid> to add persistence in a Pidfile.
78
79 This class sets up some basic coercion routines for itself so that it can
80 be created from a I<Str> (a file name), I<ArrayRef> (an array of path components
81 for a filename) or a I<Path::Class::File> object.
82
83 This class registers it's type with L<MooseX::Getopt> as well, and is expected
84 to be passed on the command line as a string (which will then go through the
85 coercion routines mentioned above).
86
87 =head1 ATTRIBUTES
88
89 =over
90
91 =item I<pid Int>
92
93 This is inherited from L<MooseX:Daemonize::Pid> and extended here to
94 get it's default value from the Pidfile (if available).
95
96 =item I<file Path::Class::File | Str>
97
98 =back
99
100 =head1 METHODS
101
102 =over
103
104 =item B<clear_pid>
105
106 =item B<has_pid>
107
108 Both of these methods are inherited from L<MooseX:Daemonize::Pid> see that
109 module for more information.
110
111 =item B<remove>
112
113 This removes the Pidfile.
114
115 =item B<write>
116
117 This writes the Pidfile.
118
119 =item B<does_file_exist>
120
121 This checks if the Pidfile exists.
122
123 =item B<is_running>
124
125 This checks if the Pidfile exists, if it does it checks to see if the process
126 is running, if the Pidfile doesn't exist, it returns false.
127
128 =item meta()
129
130 The C<meta()> method from L<Class::MOP::Class>
131
132 =back
133
134 =head1 DEPENDENCIES
135
136 Obviously L<Moose>
137
138 =head1 INCOMPATIBILITIES
139
140 None reported.
141
142 =head1 BUGS AND LIMITATIONS
143
144 No bugs have been reported.
145
146 Please report any bugs or feature requests to
147 C<bug-acme-dahut-call@rt.cpan.org>, or through the web interface at
148 L<http://rt.cpan.org>.
149
150 =head1 AUTHOR
151
152 Stevan Little  C<< <stevan.little@iinteractive.com> >>
153
154 =head1 LICENCE AND COPYRIGHT
155
156 Copyright (c) 2007-2011, Chris Prather C<< <perigrin@cpan.org> >>. All rights
157 reserved.
158
159 This module is free software; you can redistribute it and/or
160 modify it under the same terms as Perl itself. See L<perlartistic>.
161
162
163 =head1 DISCLAIMER OF WARRANTY
164
165 BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
166 FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
167 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
168 PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
169 EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
170 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
171 ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
172 YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
173 NECESSARY SERVICING, REPAIR, OR CORRECTION.
174
175 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
176 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
177 REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
178 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
179 OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
180 THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
181 RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
182 FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
183 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
184 SUCH DAMAGES.
185
186 =cut