File Coverage

blib/lib/Iterator/File/Status.pm
Criterion Covered Total %
statement 12 40 30.0
branch 0 10 0.0
condition n/a
subroutine 4 10 40.0
pod 4 6 66.6
total 20 66 30.3


line stmt bran cond sub pod time code
1             package Iterator::File::Status;
2              
3             ## $Id: Status.pm,v 1.11 2008/06/18 06:47:51 wdr1 Exp $
4              
5 8     8   42951 use 5.006;
  8         29  
  8         298  
6 8     8   42 use strict;
  8         11  
  8         248  
7 8     8   40 use warnings;
  8         12  
  8         221  
8              
9 8     8   9208 use UNIVERSAL 'can';
  8         117  
  8         40  
10              
11             our $VERSION = substr(q$Revision: 1.11 $, 10);
12              
13             our %default_config =
14             (
15             '_status_scale' => 1,
16             'status_line_interval' => 10,
17             'status_time_interval' => 2,
18             'status_line' => "Processing row '%d'...\n",
19             'status_filehandle' => \*STDERR,
20             'status_method' => 'emit_status_logarithmic',
21            
22             '_status_time_last' => time,
23             );
24              
25             sub new {
26 0     0 1   my ($class, %config) = @_;
27              
28 0           %config = (%default_config, %config);
29 0           my $self = bless(\%config, $class);
30              
31 0 0         unless (can( __PACKAGE__, $config{'status_method'} )) {
32 0           confess($default_config{'status_method'} .
33             " is not a valid status_method arguement!");
34             }
35            
36 0           return $self;
37             }
38              
39              
40             sub emit_status_logarithmic {
41 0     0 1   my ($self, $marker) = @_;
42              
43 0           my $status = "";
44 0           my $scale = $self->{_status_scale};
45              
46 0 0         return if ($marker % $scale);
47              
48 0 0         if ($marker >= $self->{_status_scale} * 10) {
49 0           $self->{_status_scale} *= 10;
50             }
51            
52 0           $self->emit_status_line( $marker );
53             }
54              
55              
56              
57             sub emit_status_fixed_line_interval {
58 0     0 1   my ($self, $marker) = @_;
59              
60 0           my $status = "";
61 0           my $interval = $self->{status_line_interval};
62              
63 0 0         return if ($marker % $interval);
64              
65 0           $self->emit_status_line( $marker );
66             }
67              
68              
69              
70             sub emit_status_fixed_time_interval {
71 0     0 1   my ($self, $marker) = @_;
72              
73 0 0         return unless (time - $self->{'_status_time_last'} >= $self->{'status_time_interval'});
74              
75 0           $self->{'_status_time_last'} = time;
76              
77 0           $self->emit_status_line( $marker );
78             }
79              
80              
81              
82             sub emit_status_line {
83 0     0 0   my ($self, $marker) = @_;
84              
85 0           my $fh = $self->{'status_filehandle'};
86 0           printf $fh $self->{'status_line'}, $marker;
87             }
88              
89              
90              
91             sub emit_status {
92 0     0 0   my $self = shift;
93              
94 0           my $method = $self->{'status_method'};
95 0           $self->$method( @_ );
96             }
97             1;
98             __END__