File Coverage

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


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 2     2   25097 use 5.006;
  2         8  
  2         87  
24              
25 2     2   13 use strict;
  2         4  
  2         69  
26 2     2   11 use warnings;
  2         4  
  2         70  
27              
28 2     2   10 use base qw(Text::CSV::Track);
  2         4  
  2         749  
29              
30 2     2   15 use FindBin;
  2         3  
  2         85  
31              
32 2     2   12 use Text::CSV_XS;
  2         4  
  2         63  
33 2     2   12 use Carp::Clan;
  2         25  
  2         21  
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 1686 my $self = shift;
48 47         59 my $identificator = shift;
49 47 100       91 my $is_set = (@_ > 0 ? 1 : 0); #get or set request depending on number of arguments
50 47         55 my $value = shift;
51              
52             #variables from self hash
53 47         125 my $rh_value_of = $self->_rh_value_of;
54              
55             #check if we have identificator
56 47 50       215 return if not $identificator;
57              
58             #if get call super value_of
59 47 100       132 return $self->SUPER::value_of($identificator) if not $is_set;
60            
61             #set
62 24         24 my $old_value;
63 24 100       54 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         14  
65             }
66 24 100 100     196 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         65 $self->SUPER::value_of($identificator, $value);
72             }
73             }
74              
75             =back
76              
77             =cut
78              
79             1;
80