File Coverage

blib/lib/Data/Object/Role/Proxyable.pm
Criterion Covered Total %
statement 24 25 96.0
branch 5 6 83.3
condition 3 6 50.0
subroutine 6 7 85.7
pod 0 1 0.0
total 38 45 84.4


line stmt bran cond sub pod time code
1             package Data::Object::Role::Proxyable;
2              
3 1     1   390490 use 5.014;
  1         5  
4              
5 1     1   7 use strict;
  1         2  
  1         27  
6 1     1   5 use warnings;
  1         3  
  1         22  
7              
8 1     1   492 use Moo::Role;
  1         9681  
  1         5  
9              
10             our $VERSION = '2.02'; # VERSION
11              
12             # METHODS
13              
14             sub AUTOLOAD {
15 4     4   315497 require Carp;
16              
17 4         32 my ($package, $method) = our $AUTOLOAD =~ m[^(.+)::(.+)$];
18              
19 4         22 my $build = $package->can('BUILDPROXY');
20              
21 4         14 my $error = qq(Can't locate object method "$method" via package "$package");
22              
23 4 50 33     28 Carp::confess($error) unless $build && ref($build) eq 'CODE';
24              
25 4         11 my $proxy = $build->($package, $method, @_);
26              
27 3 100 66     284 Carp::confess($error) unless $proxy && ref($proxy) eq 'CODE';
28              
29 2         40 goto &$proxy;
30             }
31              
32             sub BUILDPROXY {
33 4     4 0 10 my ($package, $method, $self, @args) = @_;
34              
35 4         13 require Carp;
36              
37 4         15 my $build = $self->can('build_proxy');
38              
39 4 100       77 return $build->($self, $package, $method, @args) if $build;
40              
41 1         123 Carp::confess(qq(Can't locate object method "build_proxy" via package "$package"));
42             }
43              
44             sub DESTROY {
45              
46 0     0     return;
47             }
48              
49             1;