File Coverage

blib/lib/Venus/Role/Superable.pm
Criterion Covered Total %
statement 14 14 100.0
branch n/a
condition n/a
subroutine 6 6 100.0
pod 1 2 50.0
total 21 22 95.4


line stmt bran cond sub pod time code
1             package Venus::Role::Superable;
2              
3 1     1   20 use 5.018;
  1         3  
4              
5 1     1   5 use strict;
  1         2  
  1         33  
6 1     1   7 use warnings;
  1         1  
  1         42  
7              
8 1     1   6 use Venus::Role 'with';
  1         2  
  1         8  
9              
10             # METHODS
11              
12             sub super {
13 1     1 1 6 require mro;
14 1         9 goto \&next::method
15             }
16              
17             # EXPORTS
18              
19             sub EXPORT {
20 2     2 0 7 ['super']
21             }
22              
23             1;
24              
25              
26              
27             =head1 NAME
28              
29             Venus::Role::Superable - Superable Role
30              
31             =cut
32              
33             =head1 ABSTRACT
34              
35             Superable Role for Perl 5
36              
37             =cut
38              
39             =head1 SYNOPSIS
40              
41             package Example;
42              
43             use Venus::Class;
44              
45             with 'Venus::Role::Superable';
46              
47             package main;
48              
49             my $example = Example->new;
50              
51             # $example->super;
52              
53             =cut
54              
55             =head1 DESCRIPTION
56              
57             This package modifies the consuming package and provides methods for
58             dispatching to superclasses using L.
59              
60             =cut
61              
62             =head1 METHODS
63              
64             This package provides the following methods:
65              
66             =cut
67              
68             =head2 super
69              
70             super(any @args) (any)
71              
72             The super method dispatches to superclasses uses the C3 method resolution order
73             to get better consistency in multiple inheritance situations.
74              
75             I>
76              
77             =over 4
78              
79             =item super example 1
80              
81             package Example::A;
82              
83             use Venus::Class;
84              
85             sub test {
86             my ($self, @args) = @_;
87              
88             return [$self, @args];
89             }
90              
91             package Example::B;
92              
93             use Venus::Class;
94              
95             base 'Example::A';
96              
97             with 'Venus::Role::Superable';
98              
99             sub test {
100             my ($self) = @_;
101              
102             return $self->super(1..4);
103             }
104              
105             package main;
106              
107             my $example = Example::B->new;
108              
109             my $result = $example->test;
110              
111             =back
112              
113             =cut
114              
115             =head1 AUTHORS
116              
117             Awncorp, C
118              
119             =cut
120              
121             =head1 LICENSE
122              
123             Copyright (C) 2000, Awncorp, C.
124              
125             This program is free software, you can redistribute it and/or modify it under
126             the terms of the Apache license version 2.0.
127              
128             =cut