File Coverage

blib/lib/Data/Pipeline/Action/Truncate.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1             package Data::Pipeline::Action::Truncate;
2              
3 1     1   1509 use Moose;
  0            
  0            
4             with 'Data::Pipeline::Action';
5              
6             use Data::Pipeline::Types qw( Iterator );
7              
8             has length => (
9             isa => 'Int',
10             is => 'ro',
11             required => 1
12             );
13              
14             sub transform {
15             my($self, $iterator) = @_;
16              
17             my $count = $self -> length;
18              
19             $iterator = to_Iterator($iterator);
20              
21             return Data::Pipeline::Iterator -> new(
22             source => Data::Pipeline::Iterator::Source -> new(
23             has_next => sub {
24             $count > 0 && defined($iterator) && !$iterator -> finished;
25             },
26             get_next => sub {
27             if($count > 0) {
28             $count--;
29             return $iterator -> next;
30             }
31             else {
32             $iterator = undef; # release resources
33             }
34             return undef;
35             },
36             )
37             );
38             }
39              
40             1;
41              
42             __END__