File Coverage

blib/lib/Validator/LIVR/Rules/Numeric.pm
Criterion Covered Total %
statement 48 48 100.0
branch 30 30 100.0
condition 30 39 76.9
subroutine 17 17 100.0
pod 0 7 0.0
total 125 141 88.6


line stmt bran cond sub pod time code
1             package Validator::LIVR::Rules::Numeric;
2              
3 4     4   17 use strict;
  4         5  
  4         114  
4 4     4   13 use warnings;
  4         8  
  4         82  
5              
6 4     4   15 use Scalar::Util qw/looks_like_number/;
  4         2  
  4         2143  
7              
8             our $VERSION = '0.08';
9              
10             sub integer {
11             return sub {
12 8     8   8 my $value = shift;
13 8 100 66     39 return if !defined($value) || $value eq '';
14              
15 6 100 66     40 return 'NOT_INTEGER' unless $value =~ /^\-?\d+$/ && looks_like_number($value);
16 3         5 return;
17 8     8 0 56 };
18             }
19              
20              
21             sub positive_integer {
22             return sub {
23 83     83   76 my $value = shift;
24 83 100 100     294 return if !defined($value) || $value eq '';
25              
26 78 100 66     619 return 'NOT_POSITIVE_INTEGER' unless $value =~ /^\d+$/
      100        
27             && looks_like_number($value)
28             && $value > 0;
29 62         99 return;
30 56     56 0 360 };
31             }
32              
33              
34             sub decimal {
35             return sub {
36 8     8   8 my $value = shift;
37 8 100 66     41 return if !defined($value) || $value eq '';
38              
39 6 100 100     42 return 'NOT_DECIMAL' unless $value =~ /^\-?[\d.]+$/
40             && looks_like_number($value);
41              
42 3         5 return;
43 8     8 0 54 };
44             }
45              
46              
47             sub positive_decimal {
48             return sub {
49 8     8   10 my $value = shift;
50 8 100 66     37 return if !defined($value) || $value eq '';
51              
52 6 100 66     65 return 'NOT_POSITIVE_DECIMAL' unless $value =~ /^\-?[\d.]+$/
      100        
53             && looks_like_number($value)
54             && $value > 0;
55              
56 3         5 return;
57 8     8 0 52 };
58             }
59              
60              
61             sub max_number {
62 11     11 0 11 my $max_number = shift;
63              
64             return sub {
65 19     19   19 my $value = shift;
66 19 100 66     69 return if !defined($value) || $value eq '';
67              
68 17 100       35 return 'TOO_HIGH' if $value > $max_number;
69 13         22 return;
70 11         95 };
71             }
72              
73              
74             sub min_number {
75 33     33 0 36 my $min_number = shift;
76              
77             return sub {
78 32     32   31 my $value = shift;
79 32 100 66     121 return if !defined($value) || $value eq '';
80              
81 30 100       62 return 'TOO_LOW' if $value < $min_number;
82 23         34 return;
83 33         218 };
84             }
85              
86              
87             sub number_between {
88 7     7 0 8 my ($min_number, $max_number) = @_;
89              
90             return sub {
91 7     7   8 my $value = shift;
92 7 100 66     30 return if !defined($value) || $value eq '';
93              
94 5 100       17 return 'TOO_LOW' if $value < $min_number;
95 4 100       9 return 'TOO_HIGH' if $value > $max_number;
96 3         3 return;
97 7         44 };
98             }
99              
100             1;