File Coverage

blib/lib/DTL/Fast/Filter/Join.pm
Criterion Covered Total %
statement 30 30 100.0
branch 9 10 90.0
condition 2 5 40.0
subroutine 6 6 100.0
pod 0 2 0.0
total 47 53 88.6


line stmt bran cond sub pod time code
1             package DTL::Fast::Filter::Join;
2 8     8   3276 use strict; use utf8; use warnings FATAL => 'all';
  8     8   9  
  8     8   176  
  8         23  
  8         9  
  8         34  
  8         154  
  8         8  
  8         259  
3 8     8   24 use parent 'DTL::Fast::Filter';
  8         8  
  8         34  
4              
5             $DTL::Fast::FILTER_HANDLERS{'join'} = __PACKAGE__;
6              
7             #@Override
8             sub parse_parameters
9             {
10 39     39 0 33 my( $self ) = @_;
11              
12             die $self->get_parse_error("no separator passed to the join filter")
13             if(
14             ref $self->{'parameter'} ne 'ARRAY'
15 39 50 33     82 or not scalar @{$self->{'parameter'}}
  39         104  
16             );
17            
18 39         47 $self->{'sep'} = $self->{'parameter'}->[0];
19            
20 39         81 return $self;
21             }
22              
23             #@Override
24             sub filter
25             {
26 34     34 0 34 my( $self, $filter_manager, $value, $context ) = @_;
27            
28 34         37 my $value_type = ref $value;
29 34         29 my $result = undef;
30 34         79 my $separator = $self->{'sep'}->render($context, 1);
31            
32 34         44 my @source = ();
33 34 100       61 if( $value_type eq 'HASH' )
    100          
34             {
35 1         3 @source = (%$value);
36             }
37             elsif( $value_type eq 'ARRAY' )
38             {
39 32         56 @source = @$value;
40             }
41             else
42             {
43 1   50     12 die $self->get_render_error(
44             $context,
45             sprintf( "Unable to apply join filter to the %s value"
46             , $value_type || 'SCALAR'
47             )
48             );
49             }
50            
51 33 100       62 if( $filter_manager->{'safeseq'} )
52             {
53             $separator = DTL::Fast::html_protect($separator)
54 2 100       7 if not $context->{'ns'}->[-1]->{'_dtl_safe'};
55            
56 2         2 $filter_manager->{'safe'} = 1;
57             }
58            
59 33         130 return join $separator, @source;
60             }
61              
62             1;