File Coverage

blib/lib/Data/Pipeline/Action.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;
2              
3 1     1   2333 use Moose::Role;
  0            
  0            
4              
5             use MooseX::Types::Moose qw( ArrayRef );
6              
7             use Data::Pipeline::Types qw( Iterator );
8              
9             sub to {
10             Carp::croak "Action called expecting an output adapter";
11             }
12              
13             sub make_iterator {
14             my($self, $iterator) = @_;
15              
16             Carp::confess "deprecated call to make_iterator";
17             }
18              
19             sub transform {
20             my($self, $iterator) = @_;
21              
22             my $source;
23             $iterator = to_Iterator($iterator);
24              
25             if( $self -> can('reduce_iterator') ) {
26             $source = Data::Pipeline::Iterator::Source -> new(
27             has_next => sub { 1 },
28             get_next => sub {
29             my $r = $self -> reduce_iterator($iterator);
30             if( is_Iterator($r) ) {
31             $source -> has_next( $r -> has_next );
32             $source -> get_next( $r -> get_next );
33             return $r -> get_next -> ();
34             }
35             else {
36             $source -> has_next(sub{ 0 });
37             return $r;
38             }
39             },
40             );
41              
42             }
43             elsif( $self -> can('map_item') ) {
44             $source = Data::Pipeline::Iterator::Source -> new(
45             has_next => sub { !$iterator -> finished },
46             get_next => sub { $self -> map_item($iterator -> next) },
47             );
48             }
49             else {
50             $source = inner;
51             }
52              
53             my $it = Data::Pipeline::Iterator -> new(
54             source => $source,
55             );
56             return $it;
57             }
58              
59             no Moose;
60              
61             1;
62              
63             __END__