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.05';
5 2     2   161043 use strict;
  2         3  
  2         62  
6 2     2   7 use warnings;
  2         3  
  2         112  
7              
8 2     2   754 use Sub::Attribute;
  2         4424  
  2         138  
9 2     2   14 use Carp;
  2         3  
  2         94  
10              
11 2     2   396 use Promises qw/ collect /;
  2         6  
  2         17  
12              
13 2     2   419 use parent 'Exporter';
  2         4  
  2         35  
14              
15             our @EXPORT_OK = qw/ defer /;
16              
17             sub defer(&) {
18 2     2 0 1579 my $coderef = shift;
19              
20             return sub {
21 4     4   21 collect( @_ )->then( sub { $coderef->( map { @$_ } @_ ) } );
  4         8  
  8         16  
22             }
23              
24 2         1447 }
25              
26             sub Defer :ATTR_SUB {
27 1     1 0 550 my( undef, $symbol, $referent ) = @_;
28              
29 1 50       5 croak "can't use attribute :Defer on an anonynous sub, use 'defer' instead"
30             unless $symbol;
31              
32 2     2   311 no warnings 'redefine';
  2         5  
  2         190  
33 1     3   5 $$symbol = defer { $referent->(@_) };
  3         9  
34 2     2   17 }
  2         4  
  2         23  
35              
36              
37             1;
38              
39             __END__