File Coverage

blib/lib/Sub/Meta/CreatorFunction.pm
Criterion Covered Total %
statement 29 29 100.0
branch 6 6 100.0
condition n/a
subroutine 8 8 100.0
pod 2 2 100.0
total 45 45 100.0


line stmt bran cond sub pod time code
1             package Sub::Meta::CreatorFunction;
2 4     4   441890 use 5.010;
  4         25  
3 4     4   23 use strict;
  4         9  
  4         79  
4 4     4   20 use warnings;
  4         7  
  4         120  
5              
6 4     4   1832 use Class::Load ();
  4         76675  
  4         116  
7              
8 4     4   1250 use Sub::Meta::Library;
  4         15  
  4         141  
9 4     4   1266 use Sub::Meta::Creator;
  4         11  
  4         729  
10              
11             our @FINDER_CLASSES = (
12             'Sub::Meta::Finder::FunctionParameters',
13             'Sub::Meta::Finder::SubWrapInType',
14             'Sub::Meta::Finder::Default',
15             );
16              
17             sub find_submeta {
18 23     23 1 16962 my $sub = shift;
19              
20 23 100       119 if (my $submeta = Sub::Meta::Library->get($sub)) {
21 17         62 return $submeta;
22             }
23              
24 6         69 state $creator = Sub::Meta::Creator->new(finders => finders());
25 6 100       26 if (my $submeta = $creator->create($sub)) {
26 5         27 return $submeta;
27             }
28 1         2 return;
29             }
30              
31             sub finders {
32 5     5 1 3102 my @finders;
33 5         16 for my $finder_class (@FINDER_CLASSES) {
34 12 100       669 if (Class::Load::try_load_class($finder_class)) {
35 8         1561 push @finders => $finder_class->can('find_materials');
36             }
37             }
38 5         39 return \@finders;
39             }
40              
41             1;
42             __END__