File Coverage

blib/lib/Perinci/Package/CopyFrom.pm
Criterion Covered Total %
statement 26 26 100.0
branch 6 8 75.0
condition n/a
subroutine 7 7 100.0
pod 1 1 100.0
total 40 42 95.2


line stmt bran cond sub pod time code
1             ## no critic: Modules::ProhibitAutomaticExportation
2             package Perinci::Package::CopyFrom;
3              
4             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
5             our $DATE = '2020-02-16'; # DATE
6             our $DIST = 'Perinci-Package-CopyFrom'; # DIST
7             our $VERSION = '0.001'; # VERSION
8              
9 1     1   67204 use strict 'subs', 'vars';
  1         10  
  1         35  
10 1     1   6 use warnings;
  1         2  
  1         27  
11 1     1   1647 use Log::ger;
  1         48  
  1         5  
12              
13             require Exporter;
14             our @ISA = qw(Exporter);
15             our @EXPORT = qw(copy_from);
16              
17 1     1   722 use Package::CopyFrom ();
  1         1542  
  1         242  
18              
19             sub copy_from {
20 1 50   1 1 92 my $opts = ref $_[0] eq 'HASH' ? shift : {};
21 1         2 my $src_pkg = shift;
22              
23 1 50       7 $opts->{to} = caller unless defined $opts->{to};
24              
25             $opts->{_before_copy} = sub {
26 24     24   1049 my ($name, $src_pkg, $target_pkg, $opts, $overwrite) = @_;
27 24 100       52 return 1 if $name eq '%SPEC';
28 23         45 0;
29 1         7 };
30             $opts->{_after_copy} = sub {
31 23     23   618 my ($name, $src_pkg, $target_pkg, $opts, $overwrite) = @_;
32 4         17 ${"$target_pkg\::SPEC"}{$name} = ${"$src_pkg\::SPEC"}{$name}
  4         14  
33 23 100       32 if defined ${"$src_pkg\::SPEC"}{$name};
  23         90  
34 1         6 };
35 1         6 Package::CopyFrom::copy_from($opts, $src_pkg);
36             }
37              
38             1;
39             # ABSTRACT: Copy (some) contents from another package (with Rinci metadata awareness)
40              
41             __END__