File Coverage

blib/lib/Data/Range/Compare/Stream/Iterator/Validate.pm
Criterion Covered Total %
statement 34 34 100.0
branch 6 8 75.0
condition n/a
subroutine 9 9 100.0
pod 2 5 40.0
total 51 56 91.0


line stmt bran cond sub pod time code
1             package Data::Range::Compare::Stream::Iterator::Validate;
2              
3 2     2   1464 use strict;
  2         4  
  2         52  
4 2     2   10 use warnings;
  2         3  
  2         63  
5 2     2   9 use Carp qw(croak);
  2         2  
  2         101  
6              
7 2     2   10 use base qw(Data::Range::Compare::Stream::Iterator::Base);
  2         4  
  2         704  
8              
9             sub new {
10 3     3 0 769 my ($class,$it,%args)=@_;
11              
12 3 100       187 croak 'Iterator is a required argument' unless defined($it);
13 2         16 my $self=$class->SUPER::new(iterator=>$it,%args);
14              
15 2         7 $self;
16             }
17              
18             sub prepare {
19 8     8 0 10 my ($self)=@_;
20 8 50       26 return 1 if defined($self->{next_valid_range});
21              
22 8         11 my $it=$self->{iterator};
23 8         30 while($it->has_next) {
24 10         46 my $next=$it->get_next;
25 10 100       40 if($next->get_common->boolean) {
26 6         12 $self->{next_valid_range}=$next;
27 6         18 return 1;
28             }
29 4         10 $self->on_bad_range($next)
30             }
31              
32 2         7 0;
33             }
34              
35             sub on_bad_range {
36 4     4 1 6 my ($self,$range)=@_;
37 4 50       15 $self->{on_bad_range}->($range) if defined($self->{on_bad_range});
38             }
39              
40             sub has_next {
41 8     8 0 2830 my ($self)=@_;
42 8         19 $self->prepare;
43             }
44              
45             sub get_next {
46 6     6 1 20 my ($self)=@_;
47 6         11 my $range=$self->{next_valid_range};
48 6         9 $self->{next_valid_range}=undef;
49 6         19 return $range;
50             }
51              
52             1;