File Coverage

lib/IO/Async/XMLStream/SAXReader/DuckHandler.pm
Criterion Covered Total %
statement 18 39 46.1
branch 0 10 0.0
condition n/a
subroutine 6 11 54.5
pod 0 2 0.0
total 24 62 38.7


line stmt bran cond sub pod time code
1 1     1   1293 use 5.008; # utf8
  1         3  
  1         43  
2 1     1   5 use strict;
  1         2  
  1         39  
3 1     1   17 use warnings;
  1         2  
  1         32  
4 1     1   1129 use utf8;
  1         13  
  1         6  
5              
6             package IO::Async::XMLStream::SAXReader::DuckHandler;
7             $IO::Async::XMLStream::SAXReader::DuckHandler::VERSION = '0.001000';
8             # ABSTRACT: Deferred Handler proxy for IO::Async constructor-driven interface
9              
10             our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
11              
12 1     1   100 use Scalar::Util qw(weaken);
  1         3  
  1         116  
13 1     1   5 use Carp qw(croak);
  1         2  
  1         407  
14              
15              
16              
17              
18              
19              
20              
21              
22              
23              
24             sub new {
25 0     0 0   my ( $self, $opts ) = @_;
26 0 0         croak('SAXReader option is mandatory') unless exists $opts->{SAXReader};
27 0           weaken $opts->{SAXReader};
28 0           return bless $opts, $self;
29             }
30              
31             sub _dyn_method {
32 0     0     my ( $self, $method ) = @_;
33 0           my $sax = $self->{SAXReader};
34 0           my $event = 'on_' . $method;
35 0           my $callback = $sax->can_event($event);
36 0 0         return unless $callback;
37             return sub {
38 0     0     my ( undef, @args ) = @_;
39 0           return $callback->( $sax, @args );
40 0           };
41             }
42              
43             sub can {
44 0     0 0   my ( $self, $method ) = @_;
45 0           my $orig = $self->SUPER::can($method);
46 0 0         return $orig if $orig;
47 0           return $self->_dyn_method($method);
48             }
49              
50             ## no critic (ClassHierarchies::ProhibitAutoloading)
51             sub AUTOLOAD {
52 0     0     my ( $self, @args ) = @_;
53 0           ( my $methname = our $AUTOLOAD ) =~ s/.+:://msx;
54 0 0         return if 'DESTROY' eq $methname;
55 0 0         return unless my $meth = $self->_dyn_method($methname);
56 0           return $meth->( $self, @args );
57             }
58              
59             1;
60              
61             __END__