File Coverage

blib/lib/App/dategrep/Iterator.pm
Criterion Covered Total %
statement 37 37 100.0
branch 7 8 87.5
condition n/a
subroutine 10 10 100.0
pod 0 6 0.0
total 54 61 88.5


line stmt bran cond sub pod time code
1             package App::dategrep::Iterator;
2 8     8   3025 use strict;
  8         9  
  8         183  
3 8     8   24 use warnings;
  8         7  
  8         139  
4 8     8   25 use Moo;
  8         9  
  8         30  
5 8     8   1385 use App::dategrep::Date qw(date_to_epoch);
  8         14  
  8         2352  
6              
7             has 'multiline' => ( is => 'ro', default => sub { 0 } );
8             has 'start' => ( is => 'rw', required => 1 );
9             has 'end' => ( is => 'rw', required => 1 );
10             has 'format' => ( is => 'rw', required => 1 );
11             has 'fh' => ( is => 'lazy' );
12             has 'skip_unparsable' => ( is => 'ro', default => sub { 0 } );
13              
14             has 'next_line' => (
15             is => 'rw',
16             clearer => 1,
17             );
18              
19             has 'next_entry' => (
20             is => 'rw',
21             clearer => 1,
22             );
23              
24             sub peek_line {
25 15     15 0 12 my $self = shift;
26 15 50       38 if ( not defined $self->next_line ) {
27 15         221 $self->next_line( $self->fh->getline );
28             }
29 15         312 return $self->next_line;
30             }
31              
32             sub peek_entry {
33 20     20 0 15 my $self = shift;
34 20 100       50 if ( not defined $self->next_entry ) {
35 11         28 $self->next_entry( $self->get_entry_unbuffered );
36             }
37 20         41 return $self->next_entry;
38             }
39              
40             sub next_line_has_date {
41 15     15 0 132 my $self = shift;
42 15         24 my ($epoch) = $self->to_epoch( $self->peek_line );
43 15         917 return defined $epoch;
44             }
45              
46             sub to_epoch {
47 195     195 0 221 my ( $self, $line ) = @_;
48 195         577 return date_to_epoch( $line, $self->format );
49             }
50              
51             sub get_entry {
52 105     105 0 101 my $self = shift;
53 105         174 my $next_entry = $self->next_entry();
54 105 100       174 if ( defined $next_entry ) {
55 8         137 $self->clear_next_entry();
56 8         848 return $next_entry;
57             }
58 97         202 return $self->get_entry_unbuffered;
59             }
60              
61             sub getline {
62 130     130 0 109 my $self = shift;
63 130         169 my $next_line = $self->next_line();
64 130 100       190 if ( defined $next_line ) {
65 15         281 $self->clear_next_line();
66 15         496 return $next_line;
67             }
68 115         1903 return $self->fh->getline;
69             }
70              
71             1;