File Coverage

blib/lib/Function/Interface/Info/Function.pm
Criterion Covered Total %
statement 33 33 100.0
branch 10 10 100.0
condition 11 11 100.0
subroutine 12 12 100.0
pod 10 10 100.0
total 76 76 100.0


line stmt bran cond sub pod time code
1             package Function::Interface::Info::Function;
2              
3 13     13   185933 use v5.14.0;
  13         61  
4 13     13   86 use warnings;
  13         24  
  13         5682  
5              
6             our $VERSION = "0.05";
7              
8             sub new {
9 194     194 1 48175 my ($class, %args) = @_;
10 194         778 bless \%args => $class;
11             }
12              
13 144     144 1 913 sub subname() { $_[0]->{subname} }
14 76     76 1 3727 sub keyword() { $_[0]->{keyword} }
15 199     199 1 3307 sub params() { $_[0]->{params} }
16 102     102 1 1619 sub return() { $_[0]->{return} }
17              
18             sub definition() {
19 30     30 1 59 my $self = shift;
20              
21             sprintf('%s %s(%s) :Return(%s)',
22             $self->keyword,
23             $self->subname,
24             (join ', ', map {
25 6 100       498 sprintf('%s %s%s%s',
    100          
26             $_->type_display_name,
27             $_->named ? ':' : '',
28             $_->name,
29             $_->optional ? '=' : ''
30             )
31 30         81 } @{$self->params}),
32             (join ', ', map {
33 3         136 $_->type_display_name,
34 30         76 } @{$self->return}),
  30         2424  
35             );
36             }
37              
38             sub positional_required() {
39 39     39 1 71 my $self = shift;
40 39   100     128 $self->{positional_required} //= [ grep { !$_->named && !$_->optional } @{$self->params} ]
  23   100     1824  
  32         71  
41             }
42              
43             sub positional_optional() {
44 31     31 1 1882 my $self = shift;
45 31 100 100     98 $self->{positional_optional} //= [ grep { !$_->named && $_->optional } @{$self->params} ]
  20         120  
  29         74  
46             }
47              
48             sub named_required() {
49 30     30 1 1096 my $self = shift;
50 30 100 100     90 $self->{named_required} //= [ grep { $_->named && !$_->optional } @{$self->params} ]
  19         441  
  28         73  
51             }
52              
53             sub named_optional() {
54 29     29 1 877 my $self = shift;
55 29 100 100     118 $self->{named_optional} //= [ grep { $_->named && $_->optional } @{$self->params} ]
  18         87  
  27         57  
56             }
57              
58             1;
59             __END__