File Coverage

blib/lib/Promises6/Listener.pm
Criterion Covered Total %
statement 25 25 100.0
branch 10 12 83.3
condition n/a
subroutine 3 3 100.0
pod 1 1 100.0
total 39 41 95.1


line stmt bran cond sub pod time code
1             package Promises6::Listener;
2 28     28   827 use Evo::Base -base;
  28         42  
  28         170  
3 28     28   4564 use Promises6::Util 'PROGRESS';
  28         42  
  28         8245  
4              
5             has [qw(deferred builder)];
6              
7             # onFulfill, onReject, onProgress
8             has cbs => sub { [] };
9              
10 173 50   173 1 358 sub get_msg($self, $state, $val) {
  173 50       301  
  173         178  
  173         158  
  173         163  
  173         145  
11 173         3336 my $deferred = $self->deferred;
12 173         3287 my $cb = $self->cbs->[$state];
13              
14             # then. 1.i, 1.ii
15 173 100       1140 unless (ref $cb eq 'CODE') {
16 29 100       104 $state == PROGRESS
17             ? $deferred->notify($val)
18             : $deferred->change_state($state, $val);
19 29         232 return;
20             }
21              
22             # then 7.ii
23 144         147 my $err;
24 144         138 CATCH: {
25 144         137 local $@;
26 144         198 $val = eval { $cb->($val) };
  144         357  
27 144         15685 $err = $@;
28             }
29 144 100       325 return $deferred->reject($err) if $err;
30              
31 142 100       553 $state == PROGRESS ? $deferred->notify($val) : $deferred->resolve($val);
32             }
33              
34             1;
35              
36             # ABSTRACT: A listener.
37              
38             __END__