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   3027 use strict;
  8         10  
  8         187  
3 8     8   22 use warnings;
  8         8  
  8         138  
4 8     8   24 use Moo;
  8         7  
  8         28  
5 8     8   1416 use App::dategrep::Date qw(date_to_epoch);
  8         12  
  8         2398  
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 15 my $self = shift;
26 15 50       43 if ( not defined $self->next_line ) {
27 15         301 $self->next_line( $self->fh->getline );
28             }
29 15         413 return $self->next_line;
30             }
31              
32             sub peek_entry {
33 20     20 0 16 my $self = shift;
34 20 100       57 if ( not defined $self->next_entry ) {
35 11         28 $self->next_entry( $self->get_entry_unbuffered );
36             }
37 20         39 return $self->next_entry;
38             }
39              
40             sub next_line_has_date {
41 15     15 0 164 my $self = shift;
42 15         39 my ($epoch) = $self->to_epoch( $self->peek_line );
43 15         1120 return defined $epoch;
44             }
45              
46             sub to_epoch {
47 195     195 0 226 my ( $self, $line ) = @_;
48 195         700 return date_to_epoch( $line, $self->format );
49             }
50              
51             sub get_entry {
52 105     105 0 124 my $self = shift;
53 105         171 my $next_entry = $self->next_entry();
54 105 100       182 if ( defined $next_entry ) {
55 8         162 $self->clear_next_entry();
56 8         985 return $next_entry;
57             }
58 97         213 return $self->get_entry_unbuffered;
59             }
60              
61             sub getline {
62 130     130 0 108 my $self = shift;
63 130         184 my $next_line = $self->next_line();
64 130 100       226 if ( defined $next_line ) {
65 15         366 $self->clear_next_line();
66 15         516 return $next_line;
67             }
68 115         1885 return $self->fh->getline;
69             };
70              
71             1;