File Coverage

blib/lib/DTL/Fast/Filter/Center.pm
Criterion Covered Total %
statement 26 27 96.3
branch 3 6 50.0
condition n/a
subroutine 7 7 100.0
pod 0 3 0.0
total 36 43 83.7


line stmt bran cond sub pod time code
1             package DTL::Fast::Filter::Center;
2 4     4   2512 use strict; use utf8; use warnings FATAL => 'all';
  4     4   8  
  4     4   98  
  4         21  
  4         8  
  4         20  
  4         95  
  4         6  
  4         150  
3 4     4   24 use parent 'DTL::Fast::Filter';
  4         7  
  4         24  
4              
5             $DTL::Fast::FILTER_HANDLERS{'center'} = __PACKAGE__;
6              
7             #@Override
8             sub parse_parameters
9             {
10 8     8 0 11 my $self = shift;
11             die $self->get_parse_error("no width specified for adjusting")
12 8 50       11 if not scalar @{$self->{'parameter'}};
  8         25  
13 8         17 $self->{'width'} = $self->{'parameter'}->[0];
14 8         28 return $self;
15             }
16              
17             #@Override
18             sub filter
19             {
20 8     8 0 16 my ($self, $filter_manager, $value, $context) = @_;
21            
22 8         37 my $width = $self->{'width'}->render($context);
23            
24 8 50       44 if( $width =~ /^\d+$/ )
25             {
26 8         18 my $adjustment = ($width - length $value);
27 8 50       23 if( $adjustment > 0 )
28             {
29 8         21 $value = $self->adjust($value, $adjustment);
30             }
31             }
32             else
33             {
34 0         0 die $self->get_render_error("Argument must be a positive number, not '$width'");
35             }
36 8         31 return $value;
37             }
38              
39             sub adjust
40             {
41 4     4 0 6 my ($self, $value, $adjustment) = @_;
42 4         18 return (' 'x int($adjustment/2)).$value;
43             }
44              
45             1;