File Coverage

blib/lib/DTL/Fast/Filter/Filesizeformat.pm
Criterion Covered Total %
statement 28 28 100.0
branch 3 4 75.0
condition n/a
subroutine 6 6 100.0
pod 0 1 0.0
total 37 39 94.8


line stmt bran cond sub pod time code
1             package DTL::Fast::Filter::Filesizeformat;
2 2     2   813 use strict; use utf8; use warnings FATAL => 'all';
  2     2   3  
  2     2   43  
  2         5  
  2         2  
  2         9  
  2         34  
  2         3  
  2         72  
3 2     2   7 use parent 'DTL::Fast::Filter';
  2         2  
  2         10  
4              
5             $DTL::Fast::FILTER_HANDLERS{'filesizeformat'} = __PACKAGE__;
6              
7 2     2   101 use Scalar::Util qw(looks_like_number);
  2         3  
  2         492  
8              
9             our @SUFFIX = (
10             ['KB', 1024]
11             );
12              
13             unshift @SUFFIX, ['MB', $SUFFIX[0]->[1] * 1024];
14             unshift @SUFFIX, ['GB', $SUFFIX[0]->[1] * 1024];
15             unshift @SUFFIX, ['TB', $SUFFIX[0]->[1] * 1024];
16             unshift @SUFFIX, ['PB', $SUFFIX[0]->[1] * 1024];
17             unshift @SUFFIX, ['EB', $SUFFIX[0]->[1] * 1024];
18             unshift @SUFFIX, ['ZB', $SUFFIX[0]->[1] * 1024];
19              
20             #@Override
21             sub filter
22             {
23 8     8 0 5 shift; # self
24 8         5 shift; # filter_manager
25 8         6 my $value = shift; # value
26 8         5 shift; # context
27              
28 8 50       19 if( looks_like_number($value) )
29             {
30 8         7 my $str_suffix = 'B';
31            
32 8         9 foreach my $suffix (@SUFFIX)
33             {
34 35 100       45 if( $value > $suffix->[1] )
35             {
36 7         5 $str_suffix = $suffix->[0];
37 7         44 $value = sprintf '%.01f', $value / $suffix->[1];
38 7         8 last;
39             }
40             }
41 8         17 $value = sprintf '%s %s', $value, $str_suffix;
42             }
43            
44 8         17 return $value;
45             }
46              
47             1;