File Coverage

blib/lib/Text/CSV/Track/Max.pm
Criterion Covered Total %
statement 33 33 100.0
branch 9 10 90.0
condition 6 6 100.0
subroutine 8 8 100.0
pod 1 1 100.0
total 57 58 98.2


line stmt bran cond sub pod time code
1             =head1 NAME
2              
3             Text::CSV::Track::Max - same as Text::CSV::Track but stores the greatest value
4              
5             =head1 VERSION
6              
7             This documentation refers to version 0.3.
8              
9             =head1 SYNOPSIS
10              
11             see L as this is inherited object from it.
12            
13             =head1 DESCRIPTION
14              
15             Only difference to Track is that before value is changed it is compared to the
16             old one. It it's higher then the value is updated if not old value persists.
17              
18             =cut
19              
20             package Text::CSV::Track::Max;
21              
22             our $VERSION = '0.3';
23 1     1   103592 use 5.006;
  1         3  
24              
25 1     1   4 use strict;
  1         2  
  1         39  
26 1     1   3 use warnings;
  1         1  
  1         61  
27              
28 1     1   4 use base qw(Text::CSV::Track);
  1         1  
  1         648  
29              
30 1     1   8 use FindBin;
  1         22  
  1         57  
31              
32 1     1   5 use Text::CSV_XS;
  1         2  
  1         27  
33 1     1   3 use Carp::Clan;
  1         2  
  1         11  
34              
35             =head1 METHODS
36              
37             =over 4
38              
39             =item value_of()
40              
41             Overridden function from L that stores value only if it is
42             greater then the one before.
43              
44             =cut
45              
46             sub value_of {
47 47     47 1 1251 my $self = shift;
48 47         49 my $identificator = shift;
49 47 100       76 my $is_set = (@_ > 0 ? 1 : 0); #get or set request depending on number of arguments
50 47         59 my $value = shift;
51              
52             #variables from self hash
53 47         737 my $rh_value_of = $self->_rh_value_of;
54              
55             #check if we have identificator
56 47 50       158 return if not $identificator;
57              
58             #if get call super value_of
59 47 100       108 return $self->SUPER::value_of($identificator) if not $is_set;
60            
61             #set
62 24         24 my $old_value;
63 24 100       40 if (exists $rh_value_of->{$identificator}) { #don't call SUPER::value_of because it will active lazy init that is may be not necessary
64 7         9 $old_value = ${$rh_value_of->{$identificator}}[0];
  7         9  
65             }
66 24 100 100     117 if (not defined $value
      100        
67             or not defined $old_value
68             or ($old_value < $value)
69            
70             ) { #if it is removel or the old value is smaller then set it
71 20         46 $self->SUPER::value_of($identificator, $value);
72             }
73             }
74              
75             =back
76              
77             =cut
78              
79             1;
80