File Coverage

blib/lib/HTML/Zoom/MappedStream.pm
Criterion Covered Total %
statement 17 17 100.0
branch 5 8 62.5
condition n/a
subroutine 4 4 100.0
pod 0 1 0.0
total 26 30 86.6


line stmt bran cond sub pod time code
1             package HTML::Zoom::MappedStream;
2              
3 6     6   39 use strictures 1;
  6         50  
  6         183  
4 6     6   614 use base qw(HTML::Zoom::StreamBase);
  6         11  
  6         2255  
5              
6             sub new {
7 18     18 0 42 my ($class, $args) = @_;
8 18         174 bless({
9             _source => $args->{source}, _mapper => $args->{mapper},
10             _zconfig => $args->{zconfig}
11             }, $class);
12             }
13              
14             sub _next {
15 62     62   155 my ($self, $am_peek) = @_;
16 62 50       169 return unless $self->{_source};
17             # If we were aiming for a "true" perl-like map then we should
18             # elegantly handle the case where the map function returns 0 events
19             # and the case where it returns >1 - if you're reading this comment
20             # because you wanted it to do that, now would be the time to fix it :)
21 62 50       98 if (my ($next) = $self->{_source}->${\($am_peek ? 'peek' : 'next')}) {
  62 100       257  
22 44 50       212 $self->{_peeked_from} = $next if $am_peek;
23 44         69 local $_ = $next;
24 44         140 return $self->{_mapper}->($next);
25             }
26 18         85 delete $self->{_source};
27             return
28 18         127 }
29              
30             1;