File Coverage

blib/lib/Wasm/Hook.pm
Criterion Covered Total %
statement 47 48 97.9
branch 8 10 80.0
condition n/a
subroutine 11 11 100.0
pod n/a
total 66 69 95.6


line stmt bran cond sub pod time code
1             package Wasm::Hook;
2              
3 1     1   237866 use strict;
  1         8  
  1         30  
4 1     1   5 use warnings;
  1         1  
  1         24  
5 1     1   540 use autodie;
  1         14820  
  1         4  
6 1     1   7087 use 5.008001;
  1         9  
7 1     1   500 use Wasm 0.02;
  1         995  
  1         6  
8 1     1   603 use Ref::Util qw( is_ref );
  1         1861  
  1         77  
9 1     1   878 use Path::Tiny qw( path );
  1         11808  
  1         55  
10 1     1   8 use Scalar::Util qw( refaddr );
  1         2  
  1         464  
11              
12             # ABSTRACT: Automatically load WebAssembly modules without a Perl wrapper
13             our $VERSION = '0.02'; # VERSION
14              
15              
16             sub _hook
17             {
18 2     2   22656 my(undef, $file) = @_;
19 2         6 foreach my $inc (@INC)
20             {
21 12 100       36 next if ref $inc;
22 11         29 my $pm = path($inc)->child($file);
23 11 50       698 return () if -f $pm;
24 11         234 my $basename = $pm->basename;
25 11         317 $basename =~ s/\.pm$//;
26 0         0 my($wa) = sort { $b->stat->mtime <=> $a->stat->mtime }
27 22         928 grep { -f $_ }
28 11         24 map { $pm->parent->child($basename . $_) }
  22         803  
29             qw( .wasm .wat );
30 11 100       184 next unless defined $wa;
31 1 50       7 if(-f $wa)
32             {
33 1         16 my $package = $file;
34 1         6 $package =~ s/\.pm$//;
35 1         4 $package =~ s/\//::/g;
36 1         7 my $perl = qq{package $package; use Wasm -api => 0, -exporter => 'ok', -file => "$wa"; 1;\n};
37 1         5 my $fh;
38 1         4 open $fh, '<', \$perl;
39 1         3833 return ($fh);
40             }
41             }
42 1         620 return ();
43             }
44              
45             sub import
46             {
47 1     1   12 __PACKAGE__->unimport;
48 1         35 push @INC, \&_hook;
49             }
50              
51             sub unimport
52             {
53 2 100   2   7848 @INC = grep { !is_ref($_) || refaddr($_) != refaddr(\&_hook) } @INC;
  22         86  
54             }
55              
56             1;
57              
58             __END__