File Coverage

blib/lib/App/NDTools/NDProc/Module/Remove.pm
Criterion Covered Total %
statement 38 39 97.4
branch 6 6 100.0
condition 2 3 66.6
subroutine 10 11 90.9
pod 0 4 0.0
total 56 63 88.8


line stmt bran cond sub pod time code
1             package App::NDTools::NDProc::Module::Remove;
2              
3 5     5   588 use strict;
  5         65  
  5         209  
4 5     5   34 use warnings FATAL => 'all';
  5         10  
  5         251  
5 5     5   29 use parent 'App::NDTools::NDProc::Module';
  5         12  
  5         36  
6              
7 5     5   295 use Log::Log4Cli;
  5         52  
  5         461  
8 5     5   32 use Struct::Path 0.80 qw(path);
  5         104  
  5         278  
9 5     5   35 use Struct::Path::PerlStyle 0.80 qw(path2str);
  5         82  
  5         1979  
10              
11             our $VERSION = '0.12';
12              
13 1     1 0 10 sub MODINFO { "Remove specified parts from structure" }
14              
15             sub arg_opts {
16 13     13 0 24 my $self = shift;
17              
18             return (
19             $self->SUPER::arg_opts(),
20             'strict' => \$self->{OPTS}->{strict},
21             )
22 13         43 }
23              
24             sub check_rule {
25 27     27 0 60 my ($self, $rule) = @_;
26              
27             die_fatal "At least one path should be specified", 1
28 27 100 66     87 unless ($rule->{path} and @{$rule->{path}});
  27         103  
29              
30 26         81 return $self;
31             }
32              
33             sub process_path {
34 26     26 0 71 my ($self, $data, $path, $spath, $opts) = @_;
35              
36 26 100       47 return ${$data} = undef unless (@{$spath});
  2         11  
  26         68  
37              
38 24         45 my @list = eval { path(${$data}, $spath, paths => 1, strict => $opts->{strict}) };
  24         43  
  24         115  
39 24 100       8168 die_fatal "Failed to lookup path '$path'", 4 if ($@);
40              
41 23         65 while (@list) {
42 49         3574 my ($p, undef) = splice @list, -2, 2;
43              
44 49     0   242 log_info { "Removing path '" . path2str($p). "'" };
  0         0  
45 49         217 path(${$data}, $p, delete => 1, strict => 1);
  49         129  
46             }
47             }
48              
49             1; # End of App::NDTools::NDProc::Module::Remove
50              
51             __END__