File Coverage

blib/lib/Package/Watchdog/Sub/Watched.pm
Criterion Covered Total %
statement 30 30 100.0
branch 7 8 87.5
condition n/a
subroutine 7 7 100.0
pod 1 1 100.0
total 45 46 97.8


line stmt bran cond sub pod time code
1             package Package::Watchdog::Sub::Watched;
2 3     3   947 use strict;
  3         6  
  3         1168  
3 3     3   22 use warnings;
  3         5  
  3         110  
4 3     3   2207 use Package::Watchdog::Tracker::Forbid;
  3         11  
  3         101  
5 3     3   21 use Package::Watchdog::Util;
  3         5  
  3         266  
6 3     3   18 use base 'Package::Watchdog::Sub';
  3         6  
  3         1168  
7              
8             #{{{ POD
9              
10             =pod
11              
12             =head1 NAME
13              
14             Package::Watchdog::Sub::Watched - Object to manage a watched sub.
15              
16             =head1 DESCRIPTION
17              
18             Inherits methods from Package::Watchdog::Sub.
19              
20             =head1 METHODS
21              
22             =over 4
23              
24             =item new_sub()
25              
26             Returns the sub reference that will replace the original watched sub.
27              
28             =cut
29              
30             #}}}
31              
32             sub new_sub {
33 22     22 1 822 my $self = shift;
34              
35             return sub {
36 14     14   21 my $want = wantarray();
37 14         55 my $context = {
38             watched_params => [ @_ ],
39             watched => $self,
40             };
41              
42 14         19 push @{ $self->tracker->stack } => [ $self->tracker, $context ];
  14         74  
43 14         26 my @out = eval { proper_return( $want, $self->original, @_ )};
  14         55  
44 14         2301 pop @{ $self->tracker->stack };
  14         53  
45              
46 14 100       73 die( $@ ) if $@;
47 8 100       36 return @out if $want;
48 6 100       20 return shift( @out ) if defined( $want );
49 4 50       10 return @out if @out > 1;
50 4         12 return shift( @out );
51 22         149 };
52             }
53              
54             1;
55              
56             __END__