File Coverage

blib/lib/App/NDTools/NDProc/Module/Remove.pm
Criterion Covered Total %
statement 37 38 97.3
branch 5 6 83.3
condition n/a
subroutine 9 10 90.0
pod 0 3 0.0
total 51 57 89.4


line stmt bran cond sub pod time code
1             package App::NDTools::NDProc::Module::Remove;
2              
3 5     5   597 use strict;
  5         14  
  5         234  
4 5     5   31 use warnings FATAL => 'all';
  5         13  
  5         296  
5 5     5   30 use parent 'App::NDTools::NDProc::Module';
  5         12  
  5         38  
6              
7 5     5   314 use Log::Log4Cli;
  5         13  
  5         562  
8 5     5   40 use Struct::Path 0.80 qw(path);
  5         159  
  5         328  
9 5     5   41 use Struct::Path::PerlStyle 0.80 qw(str2path path2str);
  5         83  
  5         1947  
10              
11             our $VERSION = '0.09';
12              
13 1     1 0 9 sub MODINFO { "Remove specified parts from structure" }
14              
15             sub arg_opts {
16 10     10 0 24 my $self = shift;
17              
18             return (
19             $self->SUPER::arg_opts(),
20             'strict' => \$self->{OPTS}->{strict},
21             )
22 10         51 }
23              
24             sub process_path {
25 26     26 0 93 my ($self, $data, $path, $opts) = @_;
26              
27 26         57 my $spath = eval { str2path($path) };
  26         120  
28 26 50       82622 die_fatal "Failed to parse path ($@)", 4 if ($@);
29              
30 26 100       54 return ${$data} = undef unless (@{$spath});
  2         15  
  26         88  
31              
32 24         40 my @list = eval { path(${$data}, $spath, paths => 1, strict => $opts->{strict}) };
  24         45  
  24         148  
33 24 100       4613 die_fatal "Failed to resolve path '$path'", 4 if ($@);
34              
35 23         80 while (@list) {
36 49         3487 my ($p, undef) = splice @list, -2, 2;
37              
38 49     0   285 log_info { "Removing path '" . path2str($p). "'" };
  0         0  
39 49         235 path(${$data}, $p, delete => 1, strict => 1);
  49         141  
40             }
41             }
42              
43             1; # End of App::NDTools::NDProc::Module::Remove
44              
45             __END__