File Coverage

blib/lib/FFI/Build/Plugin.pm
Criterion Covered Total %
statement 37 38 97.3
branch 6 8 75.0
condition 1 3 33.3
subroutine 6 6 100.0
pod 0 2 0.0
total 50 57 87.7


line stmt bran cond sub pod time code
1             package FFI::Build::Plugin;
2              
3 9     9   185926 use strict;
  9         17  
  9         219  
4 9     9   39 use warnings;
  9         13  
  9         175  
5 9     9   3343 use autodie;
  9         99315  
  9         52  
6 9     9   54579 use File::Spec::Functions qw( catdir catfile );
  9         6777  
  9         3780  
7              
8             # ABSTRACT: Platform and local customizations of FFI::Build
9             our $VERSION = '2.07'; # VERSION
10              
11              
12             sub new
13             {
14 11     11 0 14321 my($class) = @_;
15              
16 11         23 my %plugins;
17              
18 11         26 foreach my $inc (@INC)
19             {
20             # CAVEAT: won't work with an @INC hook. Plugins must be in a "real" directory.
21 109         435 my $path = catdir($inc, 'FFI', 'Build', 'Plugin');
22 109 100       956 next unless -d $path;
23 2         5 my $dh;
24 2         8 opendir $dh, $path;
25 2         1344 my @list = readdir $dh;
26 2         13 closedir $dh;
27              
28 2         538 foreach my $name (map { my $x = $_; $x =~ s/\.pm$//; $x } grep /\.pm$/, @list)
  4         9  
  4         11  
  4         9  
29             {
30 4 50       11 next if defined $plugins{$name};
31 4         20 my $pm = catfile('FFI', 'Build', 'Plugin', "$name.pm");
32 4         954 require $pm;
33 4         12 my $class = "FFI::Build::Plugin::$name";
34 4 50 33     46 if($class->can("api_version") && $class->api_version == 0)
35             {
36 4         10 $plugins{$name} = $class->new;
37             }
38             else
39             {
40 0         0 warn "$class is not the correct api version. You may need to upgrade the plugin, platypus or uninstall the plugin";
41             }
42             }
43             }
44              
45 11         66 bless \%plugins, $class;
46             }
47              
48             sub call
49             {
50 208     208 0 2434 my($self, $method, @args) = @_;
51              
52 208         1075 foreach my $name (sort keys %$self)
53             {
54 2         4 my $plugin = $self->{$name};
55 2 100       10 $plugin->$method(@args) if $plugin->can($method);
56             }
57              
58 208         820 1;
59             }
60              
61             1;
62              
63             __END__