1.08
[catagits/HTTP-Body.git] / lib / HTTP / Body.pm
index 5dd4f32..eb096b1 100644 (file)
@@ -4,8 +4,6 @@ use strict;
 
 use Carp       qw[ ];
 
-our $VERSION = '1.06';
-
 our $TYPES = {
     'application/octet-stream'          => 'HTTP::Body::OctetStream',
     'application/x-www-form-urlencoded' => 'HTTP::Body::UrlEncoded',
@@ -68,7 +66,8 @@ It is currently used by L<Catalyst> to parse POST bodies.
 
 When parsing multipart bodies, temporary files are created to store any
 uploaded files.  You must delete these temporary files yourself after
-processing them.
+processing them, or set $body->cleanup(1) to automatically delete them
+at DESTROY-time.
 
 =head1 METHODS
 
@@ -98,6 +97,7 @@ sub new {
     my $body = $TYPES->{ $type || 'application/octet-stream' };
 
     my $self = {
+        cleanup        => 0,
         buffer         => '',
         chunk_buffer   => '',
         body           => undef,
@@ -116,6 +116,20 @@ sub new {
     return $self->init;
 }
 
+sub DESTROY {
+    my $self = shift;
+    
+    if ( $self->{cleanup} ) {
+        my @temps = ();
+        for my $upload ( values %{ $self->{upload} } ) {
+            push @temps, map { $_->{tempname} || () }
+                ( ref $upload eq 'ARRAY' ? @{$upload} : $upload );
+        }
+        
+        unlink map { $_ } grep { -e $_ } @temps;
+    }
+}
+
 =item add
 
 Add string to internal buffer. Will call spin unless done. returns
@@ -220,6 +234,18 @@ sub chunked {
     return shift->{chunked};
 }
 
+=item cleanup
+
+Set to 1 to enable automatic deletion of temporary files at DESTROY-time.
+
+=cut
+
+sub cleanup {
+    my $self = shift;
+    $self->{cleanup} = shift if @_;
+    return $self->{cleanup};
+}
+
 =item content_length
 
 Returns the content-length for the body data if known.
@@ -366,7 +392,7 @@ sub tmpdir {
 
 =head1 AUTHOR
 
-Christian Hansen, C<ch@ngmedia.com>
+Christian Hansen, C<chansen@cpan.org>
 
 Sebastian Riedel, C<sri@cpan.org>