File Coverage

blib/lib/Promises/Sub.pm
Criterion Covered Total %
statement 33 33 100.0
branch 1 2 50.0
condition n/a
subroutine 12 12 100.0
pod 0 2 0.0
total 46 49 93.8


line stmt bran cond sub pod time code
1             package Promises::Sub;
2             our $AUTHORITY = 'cpan:YANICK';
3             # ABSTRACT: Turns functions into promises
4             $Promises::Sub::VERSION = '1.02';
5 1     1   1408 use strict;
  1         2  
  1         30  
6 1     1   5 use warnings;
  1         9  
  1         26  
7              
8 1     1   462 use Sub::Attribute;
  1         2166  
  1         61  
9 1     1   6 use Carp;
  1         2  
  1         51  
10              
11 1     1   5 use Promises qw/ collect /;
  1         1  
  1         7  
12              
13 1     1   257 use parent 'Exporter';
  1         2  
  1         5  
14              
15             our @EXPORT_OK = qw/ defer /;
16              
17             sub defer(&) {
18 2     2 0 1810 my $coderef = shift;
19              
20             return sub {
21 4     4   21 collect( @_ )->then( sub { $coderef->( map { @$_ } @_ ) } );
  4         9  
  8         19  
22             }
23              
24 2         1347 }
25              
26             sub Defer :ATTR_SUB {
27 1     1 0 682 my( undef, $symbol, $referent ) = @_;
28              
29 1 50       4 croak "can't use attribute :Defer on an anonynous sub, use 'defer' instead"
30             unless $symbol;
31              
32 1     1   167 no warnings 'redefine';
  1         3  
  1         66  
33 1     3   7 $$symbol = defer { $referent->(@_) };
  3         8  
34 1     1   6 }
  1         2  
  1         7  
35              
36              
37             1;
38              
39             __END__