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   555 use strict;
  5         14  
  5         204  
4 5     5   32 use warnings FATAL => 'all';
  5         10  
  5         244  
5 5     5   109 use parent 'App::NDTools::NDProc::Module';
  5         13  
  5         38  
6              
7 5     5   341 use Log::Log4Cli;
  5         12  
  5         514  
8 5     5   34 use Struct::Path 0.80 qw(path);
  5         137  
  5         281  
9 5     5   34 use Struct::Path::PerlStyle 0.80 qw(path2str);
  5         78  
  5         2082  
10              
11             our $VERSION = '0.13';
12              
13 1     1 0 10 sub MODINFO { "Remove specified parts from structure" }
14              
15             sub arg_opts {
16 14     14 0 31 my $self = shift;
17              
18             return (
19             $self->SUPER::arg_opts(),
20             'strict' => \$self->{OPTS}->{strict},
21             )
22 14         54 }
23              
24             sub check_rule {
25 27     27 0 67 my ($self, $rule) = @_;
26              
27             die_fatal "At least one path should be specified", 1
28 27 100 66     101 unless ($rule->{path} and @{$rule->{path}});
  27         108  
29              
30 26         95 return $self;
31             }
32              
33             sub process_path {
34 26     26 0 79 my ($self, $data, $path, $spath, $opts) = @_;
35              
36 26 100       48 return ${$data} = undef unless (@{$spath});
  2         12  
  26         81  
37              
38 24         50 my @list = eval { path(${$data}, $spath, paths => 1, strict => $opts->{strict}) };
  24         43  
  24         126  
39 24 100       8634 die_fatal "Failed to lookup path '$path'", 4 if ($@);
40              
41 23         66 while (@list) {
42 49         3376 my ($p, undef) = splice @list, -2, 2;
43              
44 49     0   250 log_info { "Removing path '" . path2str($p). "'" };
  0         0  
45 49         223 path(${$data}, $p, delete => 1, strict => 1);
  49         128  
46             }
47             }
48              
49             1; # End of App::NDTools::NDProc::Module::Remove
50              
51             __END__