File Coverage

lib/Rex/Interface/Executor/Default.pm
Criterion Covered Total %
statement 53 56 94.6
branch 11 14 78.5
condition 1 3 33.3
subroutine 9 9 100.0
pod 0 2 0.0
total 74 84 88.1


line stmt bran cond sub pod time code
1             #
2             # (c) Jan Gehring
3             #
4              
5             package Rex::Interface::Executor::Default;
6              
7 55     55   766 use v5.12.5;
  55         218  
8 55     55   304 use warnings;
  55         118  
  55         2570  
9              
10             our $VERSION = '1.14.3'; # VERSION
11              
12 55     55   653 use Rex::Hook;
  55         120  
  55         3148  
13 55     55   358 use Rex::Logger;
  55         126  
  55         425  
14 55     55   1291 use Data::Dumper;
  55         131  
  55         2648  
15              
16 55     55   627 use Rex::Interface::Executor::Base;
  55         176  
  55         694  
17 55     55   1722 use base qw(Rex::Interface::Executor::Base);
  55         140  
  55         24812  
18              
19             require Rex::Args;
20              
21             sub new {
22 213     213 0 491 my $that = shift;
23 213   33     937 my $proto = ref($that) || $that;
24 213         539 my $self = {@_};
25              
26 213         422 bless( $self, $proto );
27              
28 213         1389 return $self;
29             }
30              
31             sub exec {
32 54     54 0 264 my ( $self, $opts, $args ) = @_;
33              
34 54         191 my $task = $self->{task};
35              
36 54         621 Rex::Logger::debug( "Executing " . $task->name );
37              
38 54         181 my $wantarray = wantarray;
39              
40 54         156 my @ret;
41 54         128 eval {
42 54         446 my $code = $task->code;
43              
44 54         273 Rex::Hook::run_hook( task => "before_execute", $task->name, @_ );
45              
46 54 100       231 if ($wantarray) {
47 1 50       4 if ( ref $opts eq "ARRAY" ) {
48 1         3 @ret = $code->( @{$opts} );
  1         4  
49             }
50             else {
51 0         0 @ret = $code->( $opts, $args );
52             }
53             }
54             else {
55 53 100       253 if ( ref $opts eq "ARRAY" ) {
56 13         27 $ret[0] = $code->( @{$opts} );
  13         137  
57             }
58             else {
59 40         699 $ret[0] = $code->( $opts, $args );
60             }
61             }
62              
63 47         19711 Rex::Hook::run_hook( task => "after_execute", $task->name, @_ );
64             };
65              
66 54         335 my $error = $@;
67 54         1274 my %opts = Rex::Args->getopts;
68              
69 54 100       381 if ($error) {
70 7 50       81 if ( exists $opts{o} ) {
71 0         0 Rex::Output->get->add( $task->name, error => 1, msg => $error );
72             }
73             else {
74 7         107 Rex::Logger::info( "Error executing task:", "error" );
75 7         60 Rex::Logger::info( "$error", "error" );
76 7         117 die($error);
77             }
78             }
79             else {
80 47 50       297 if ( exists $opts{o} ) {
81 0         0 Rex::Output->get->add( $task->name );
82             }
83             }
84              
85 47 100       265 if ($wantarray) {
86 1         4 return @ret;
87             }
88             else {
89 46         425 return $ret[0];
90             }
91             }
92              
93             1;