File Coverage

blib/lib/Iterator/File/State/TempFile.pm
Criterion Covered Total %
statement 59 59 100.0
branch 7 12 58.3
condition 4 11 36.3
subroutine 14 14 100.0
pod 6 6 100.0
total 90 102 88.2


line stmt bran cond sub pod time code
1             package Iterator::File::State::TempFile;
2              
3             ## $Id: TempFile.pm,v 1.8 2008/06/11 05:20:07 wdr1 Exp $
4              
5 3     3   1311 use 5.006;
  3         11  
  3         126  
6 3     3   16 use strict;
  3         14  
  3         106  
7 3     3   15 use warnings;
  3         6  
  3         90  
8              
9 3     3   17 use Carp;
  3         7  
  3         221  
10 3     3   16 use Data::Dumper;
  3         6  
  3         150  
11 3     3   17 use IO::File;
  3         12  
  3         631  
12 3     3   18 use Digest::MD5 qw|md5_hex|;
  3         6  
  3         190  
13              
14 3     3   1384 use Iterator::File::State::Interface;
  3         7  
  3         25  
15              
16             our @ISA = qw(Iterator::File::State::Interface);
17             our $VERSION = substr(q$Revision: 1.8 $, 10);
18              
19             our %default_config = ();
20              
21              
22             sub new {
23 4     4 1 18 my ($class, %config) = @_;
24              
25 4 50 33     16 confess("No file name given!")
26             unless ($config{'filename'} || $config{'marker_file'});
27              
28 4         26 %config = (%default_config, %config);
29 4 50       18 unless ($config{'marker_file'}) {
30 4   50     51 $config{'marker_file'} = ($ENV{'TMPDIR'} || $ENV{'TEMPDIR'} || '/tmp')
31             . '/iterator-file-' . md5_hex( $config{filename}) . '.tmp';
32             }
33            
34 4         28 my $self = $class->SUPER::new( %config );
35 4         11 bless($self, $class);
36              
37 4         35 $self->_verbose("Marker file is '", $self->{'marker_file'}, "'...\n");
38              
39 4         16 return $self;
40             }
41              
42              
43              
44             sub initialize {
45 4     4 1 9 my ($self) = @_;
46              
47 4         20 $self->_debug( __PACKAGE__ . " initializing... ");
48            
49 4         7 my $marker_file = $self->{'marker_file'};
50              
51             ## What's our marker (possibly from prior run)
52 4         6 my $marker = 0;
53 4 100       119 if (-f $marker_file) {
54 1   33     4 my $fh = new IO::File ($self->{'marker_file'}, "r")
55             || croak("Couldn't open '", $self->{'marker_file'}, "': $!");
56 1         106 $marker = <$fh>;
57 1         6 $fh->close();
58             }
59              
60 4   33     31 my $fh = new IO::File ($self->{'marker_file'}, "w")
61             || croak("Couldn't open '", $self->{'marker_file'}, "': $!");
62            
63 4         599 $self->{'marker_filehandle'} = $fh;
64 4         8 $self->{'marker'} = $marker;
65            
66 4         21 $self->_verbose( "Starting marker location is '$marker'..." );
67             }
68              
69              
70              
71             sub finish {
72 3     3 1 5 my ($self) = @_;
73            
74 3         5 my $fh = $self->{'marker_filehandle'};
75 3 50       10 $fh->close() || warn("Couldn't close '", $self->{'marker_file'}, "': $!");
76 3         66 $self->_debug("Removing '", $self->{'marker_file'}, "'...");
77 3 50       307 unlink( $self->{'marker_file'} ) ||
78             warn("Couldn't unlink '", $self->{'marker_file'}, "': $!");
79             }
80              
81              
82              
83             sub marker {
84 15     15 1 23 my ($self) = @_;
85            
86 15         52 return $self->{'marker'};
87             }
88              
89              
90              
91             sub set_marker {
92 10     10 1 12 my ($self, $num) = @_;
93            
94 10         13 $self->{'marker'} = $num;
95 10         23 my $fh = $self->{'marker_filehandle'};
96 10 50       38 $fh->seek(0, SEEK_SET)
97             || confess("Unable to set position in marker file!");
98 10         245 print $fh $self->{'marker'};
99             }
100              
101              
102              
103             sub marker_file {
104 1     1 1 5 my ($self) = @_;
105              
106 1         34 return $self->{'marker_file'};
107             }
108              
109              
110              
111             # Preloaded methods go here.
112              
113             1;
114             __END__