File Coverage

blib/lib/IO/All/Base.pm
Criterion Covered Total %
statement 128 203 63.0
branch 28 44 63.6
condition 3 11 27.2
subroutine 38 42 90.4
pod 0 3 0.0
total 197 303 65.0


line stmt bran cond sub pod time code
1             package IO::All::Base;
2              
3             # use Mo qw'default build import exporter xxx';
4             # The following line of code was produced from the previous line by
5             # Mo::Inline version 0.38
6 3 100 0 3   17 no warnings;my$M=__PACKAGE__.'::';*{$M.Object::new}=sub{my$c=shift;my$s=bless{@_},$c;my%n=%{$c.::.':E'};map{$s->{$_}=$n{$_}->()if!exists$s->{$_}}keys%n;$s};*{$M.import}=sub{import warnings;$^H|=1538;my($P,%e,%o)=caller.'::';shift;eval"no Mo::$_",&{$M.$_.::e}($P,\%e,\%o,\@_)for@_;return if$e{M};%e=(extends,sub{eval"no $_[0]()";@{$P.ISA}=$_[0]},has,sub{my$n=shift;my$m=sub{$#_?$_[0]{$n}=$_[1]:$_[0]{$n}};@_=(default,@_)if!($#_%2);$m=$o{$_}->($m,$n,@_)for sort keys%o;*{$P.$n}=$m},%e,);*{$P.$_}=$e{$_}for keys%e;@{$P.ISA}=$M.Object};*{$M.'default::e'}=sub{my($P,$e,$o)=@_;$o->{default}=sub{my($m,$n,%a)=@_;exists$a{default}or return$m;my($d,$r)=$a{default};my$g='HASH'eq($r=ref$d)?sub{+{%$d}}:'ARRAY'eq$r?sub{[@$d]}:'CODE'eq$r?$d:sub{$d};my$i=exists$a{lazy}?$a{lazy}:!${$P.':N'};$i or ${$P.':E'}{$n}=$g and return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$g->(@_):$m->(@_)}}};*{$M.'build::e'}=sub{my($P,$e)=@_;$e->{new}=sub{$c=shift;my$s=&{$M.Object::new}($c,@_);my@B;do{@B=($c.::BUILD,@B)}while($c)=@{$c.::ISA};exists&$_&&&$_($s)for@B;$s}};my$i=\&import;*{$M.import}=sub{(@_==2 and not$_[1])?pop@_:@_==1?push@_,grep!/import/,@f:();goto&$i};*{$M.'exporter::e'}=sub{my($P)=@_;if(@{$M.EXPORT}){*{$P.$_}=\&{$M.$_}for@{$M.EXPORT}}};use constant XXX_skip=>1;my$dm='YAML::XS';*{$M.'xxx::e'}=sub{my($P,$e)=@_;$e->{WWW}=sub{require XXX;local$XXX::DumpModule=$dm;XXX::WWW(@_)};$e->{XXX}=sub{require XXX;local$XXX::DumpModule=$dm;XXX::XXX(@_)};$e->{YYY}=sub{require XXX;local$XXX::DumpModule=$dm;XXX::YYY(@_)};$e->{ZZZ}=sub{require XXX;local$XXX::DumpModule=$dm}};@f=qw[default build import exporter xxx];use strict;use warnings;
  3 100 33 3   6  
  3 100 33 3   4565  
  3 100   3   23  
  3 100   3   7  
  3 50   3   1194  
  3 50   3   21  
  3 100   3   5  
  3 100   3   105  
  3 50   3   14  
  3 100   3   6  
  3 50   3   452  
  3 100   3   1718  
  0 100   3   0  
  0     3   0  
  3     3   1631  
  0     3   0  
  0     3   0  
  3     3   1275  
  0     3   0  
  0     3   0  
  3     3   1365  
  0     3   0  
  0     3   0  
  3     3   1480  
  0     3   0  
  0     3   0  
  3     1   1241  
  0     1   0  
  0     1   0  
  3     1   1315  
  0     6   0  
  0         0  
  3         1286  
  0         0  
  0         0  
  3         2021  
  3         9  
  3         33  
  3         1312  
  0         0  
  0         0  
  3         1273  
  0         0  
  0         0  
  3         1201  
  0         0  
  0         0  
  3         1293  
  0         0  
  0         0  
  3         2088  
  3         11  
  3         33  
  3         1621  
  0         0  
  0         0  
  3         1175  
  0         0  
  0         0  
  3         1513  
  0         0  
  0         0  
  3         1175  
  0         0  
  0         0  
  3         1416  
  0         0  
  0         0  
  3         1219  
  0         0  
  0         0  
  3         1191  
  0         0  
  0         0  
  3         1196  
  0         0  
  0         0  
  3         520  
  2         5  
  2         20  
  1         454  
  0         0  
  0         0  
  1         544  
  0         0  
  0         0  
  1         639  
  0         0  
  0         0  
  1         8  
  1         2  
  1         9  
  6         29  
  9         205  
  26         259  
  12         266  
  15         56  
  15         91  
  12         70  
  6         9  
  14         154  
  18         541  
  30         145  
  6         183  
  6         27  
  3         68  
  0         0  
  0         0  
  3         9  
  3         14  
  3         9  
  0         0  
  3         20  
  6         38  
  5         12  
  5         484  
  0         0  
  0         0  
  0         0  
  0         0  
  5         74  
  5         27  
  0         0  
  0         0  
  0         0  
  6         28  
  6         30  
  6         25  
  6         29  
  6         10  
  12         48  
  11         482  
  16         764  
  11         480  
  9         24  
  9         46  
  8         31  
  3         24  
  0         0  
  3         8  
  8         31  
  11         81  
  8         26  
  11         37  
  5         25  
  14         40  
  16         68  
  21         408  
  21         87  
  11         68  
  11         52  
  11         41  
  11         582  
  11         50  
  11         196  
  11         67  
  16         1863  
  16         396  
  21         607  
  21         480  
7              
8             our @EXPORT = qw(chain option);
9              
10             sub option {
11 12     12 0 31 my $package = caller;
12 12         21 my ($field, $default) = @_;
13 12   50     117 $default ||= 0;
14 12         65 field("_$field", $default);
15 3     3   16 no strict 'refs';
  3         6  
  3         654  
16 12         87 *{"${package}::$field"} =
17             sub {
18 2     2   3 my $self = shift;
19 2 100       24 $self->{"_$field"} = @_ ? shift(@_) : 1;
20 2         15 return $self;
21 12         59 };
22             }
23              
24             sub chain {
25 0     0 0 0 my $package = caller;
26 0         0 my ($field, $default) = @_;
27 3     3   15 no strict 'refs';
  3         12  
  3         731  
28 0         0 *{"${package}::$field"} =
29             sub {
30 0     0   0 my $self = shift;
31 0 0       0 if (@_) {
32 0         0 $self->{$field} = shift;
33 0         0 return $self;
34             }
35 0 0       0 return $default unless exists $self->{$field};
36 0         0 return $self->{$field};
37 0         0 };
38             }
39              
40             sub field {
41 12     12 0 22 my $package = caller;
42 12         22 my ($field, $default) = @_;
43 3     3   19 no strict 'refs';
  3         5  
  3         767  
44 12 100       20 return if defined &{"${package}::$field"};
  12         94  
45 9         63 *{"${package}::$field"} =
46             sub {
47 0     0     my $self = shift;
48 0 0         unless (exists $self->{$field}) {
49 0 0         $self->{$field} =
    0          
50             ref($default) eq 'ARRAY' ? [] :
51             ref($default) eq 'HASH' ? {} :
52             $default;
53             }
54 0 0         return $self->{$field} unless @_;
55 0           $self->{$field} = shift;
56 9         44 };
57             }
58              
59             package IO::All::OO::Object;
60              
61             sub throw {
62 0     0     my $self = shift;
63 0           require Carp;
64 0           Carp::croak(@_);
65             }
66              
67             1;