File Coverage

blib/lib/DTL/Fast/Tag/Cycle.pm
Criterion Covered Total %
statement 35 35 100.0
branch 6 6 100.0
condition 5 6 83.3
subroutine 7 7 100.0
pod 0 3 0.0
total 53 57 92.9


line stmt bran cond sub pod time code
1             package DTL::Fast::Tag::Cycle;
2 2     2   1356 use strict; use utf8; use warnings FATAL => 'all';
  2     2   4  
  2     2   117  
  2         10  
  2         4  
  2         13  
  2         48  
  2         5  
  2         77  
3 2     2   10 use parent 'DTL::Fast::Tag::Simple';
  2         8  
  2         14  
4              
5             $DTL::Fast::TAG_HANDLERS{'cycle'} = __PACKAGE__;
6              
7             #@Override
8             sub parse_parameters
9             {
10 11     11 0 16 my $self = shift;
11            
12 11         232 $self->{'parameter'} =~ /^\s*(.+?)\s*(?:as (.+?)\s*(silent)?)?\s*$/;
13 11   50     103 @{$self}{'source', 'destination', 'silent', 'sources', 'current_sources'} = ($1 // '', $2 // '', $3 // '', [], []);
  11   100     51  
      100        
14 11         46 $self->{'sources'} = $self->parse_sources($self->{'source'});
15            
16 11         27 return $self;
17             }
18              
19             #@Override
20             sub render
21             {
22 53     53 0 75 my( $self, $context, $global_safe) = @_;
23 53         121 my $result = '';
24            
25 53         100 my $source = $self->get_next_source();
26 53         203 my $current_value = $source->render($context, $global_safe);
27            
28 53 100       262 if( not $self->{'silent'} )
29             {
30 43         72 $result = $current_value;
31             }
32            
33 53 100       170 if( $self->{'destination'} )
34             {
35 20         60 $context->set( $self->{'destination'} => $current_value );
36             }
37            
38 53         211 return $result;
39             }
40              
41             sub get_next_source
42             {
43 53     53 0 66 my $self = shift;
44            
45 53 100       54 if( not scalar @{$self->{'current_sources'}} ) # populate for current cycle
  53         139  
46             {
47 18         20 push @{$self->{'current_sources'}}, @{$self->{'sources'}};
  18         35  
  18         39  
48             }
49            
50 53         64 return shift @{$self->{'current_sources'}};
  53         109  
51             }
52              
53             1;