File Coverage

blib/lib/Catmandu/Fix/Condition/is_true.pm
Criterion Covered Total %
statement 22 22 100.0
branch 6 6 100.0
condition 12 12 100.0
subroutine 8 8 100.0
pod n/a
total 48 48 100.0


line stmt bran cond sub pod time code
1              
2             use Catmandu::Sane;
3 1     1   676  
  1         2  
  1         5  
4             our $VERSION = '1.2018';
5              
6             use Moo;
7 1     1   7 use Catmandu::Util qw(is_number is_string is_bool);
  1         10  
  1         7  
8 1     1   314 use namespace::clean;
  1         8  
  1         49  
9 1     1   5 use Catmandu::Fix::Has;
  1         3  
  1         12  
10 1     1   336  
  1         2  
  1         6  
11             has path => (fix_arg => 1);
12             has strict => (fix_opt => 1);
13              
14             with 'Catmandu::Fix::Condition::Builder::Simple';
15              
16             my ($self) = @_;
17             if ($self->strict) {
18 2     2   16 sub {
19 2 100       8 is_bool($_[0]) && $_[0];
20             };
21 5 100   5   15 }
22 1         4 else {
23             sub {
24             my $val = $_[0];
25             (is_bool($val) && $val)
26 6     6   8 || (is_number($val) && $val == 1)
27 6 100 100     28 || (is_string($val) && $val eq 'true');
      100        
      100        
      100        
28             };
29             }
30 1         6 }
31              
32             1;
33              
34              
35             =pod
36              
37             =head1 NAME
38              
39             Catmandu::Fix::Condition::is_true - only execute fixes if all path values are the boolean true, 1 or "true"
40              
41             =head1 SYNOPSIS
42              
43             if is_true(data.*.has_error)
44             ...
45             end
46              
47             # strict only matches a real bool, not 1 or "1" or "true"
48             if is_true(data.*.has_error, strict: 1)
49             ...
50             end
51              
52             =head1 SEE ALSO
53              
54             L<Catmandu::Fix>
55              
56             =cut