File Coverage

inc/Test2/Util/HashBase.pm
Criterion Covered Total %
statement 39 49 79.5
branch 9 14 64.2
condition 2 5 40.0
subroutine 11 14 78.5
pod n/a
total 61 82 74.3


line stmt bran cond sub pod time code
1             #line 1
2 6     6   40 package Test2::Util::HashBase;
  6         10  
  6         165  
3 6     6   28 use strict;
  6         10  
  6         189  
4             use warnings;
5              
6             #################################################################
7             # #
8             # This is a generated file! Do not modify this file directly! #
9             # Use hashbase_inc.pl script to regenerate this file. #
10             # The script is part of the Object::HashBase distribution. #
11             # #
12             #################################################################
13              
14 6     6   29 {
  6         13  
  6         440  
15             no warnings 'once';
16             $Test2::Util::HashBase::VERSION = '0.002';
17             *Test2::Util::HashBase::ATTR_SUBS = \%Object::HashBase::ATTR_SUBS;
18             }
19              
20              
21             require Carp;
22 6     6   54 {
  6         25  
  6         521  
23             no warnings 'once';
24             $Carp::Internal{+__PACKAGE__} = 1;
25             }
26              
27             BEGIN {
28             # these are not strictly equivalent, but for out use we don't care
29             # about order
30 6     6   39 *_isa = ($] >= 5.010 && require mro) ? \&mro::get_linear_isa : sub {
  6         18  
  6         781  
31 0         0 no strict 'refs';
32 0         0 my @packages = ($_[0]);
33 0         0 my %seen;
34 0         0 for my $package (@packages) {
  0         0  
35             push @packages, grep !$seen{$_}++, @{"$package\::ISA"};
36 0         0 }
37             return \@packages;
38 6 50 33 6   2989 }
39             }
40              
41             my %STRIP = (
42             '^' => 1,
43             '-' => 1,
44             );
45              
46 108     108   2423 sub import {
47 108         237 my $class = shift;
48             my $into = caller;
49 108         529  
50 108   50     638 my $isa = _isa($into);
51             my $attr_subs = $Test2::Util::HashBase::ATTR_SUBS{$into} ||= {};
52             my %subs = (
53 90 100       618 ($into->can('new') ? () : (new => \&_new)),
  108         297  
54             (map %{$Test2::Util::HashBase::ATTR_SUBS{$_} || {}}, @{$isa}[1 .. $#$isa]),
55             (
56 108 100       1149 map {
  528         1189  
57 528         680 my $p = substr($_, 0, 1);
58 528 50       1098 my $x = $_;
59 528         1172 substr($x, 0, 1) = '' if $STRIP{$p};
60 0     0   0 my ($sub, $attr) = (uc $x, $x);
61 644     644   3174 $sub => ($attr_subs->{$sub} = sub() { $attr }),
62 0     0   0 $attr => sub { $_[0]->{$attr} },
63 0     0   0 $p eq '-' ? ("set_$attr" => sub { Carp::croak("'$attr' is read-only") })
  0         0  
64 528 50   101   7212 : $p eq '^' ? ("set_$attr" => sub { Carp::carp("set_$attr() is deprecated"); $_[0]->{$attr} = $_[1] })
  101 50       266  
65             : ("set_$attr" => sub { $_[0]->{$attr} = $_[1] }),
66             } @_
67             ),
68             );
69 6     6   6775  
  6         21  
  6         1096  
70 108         776 no strict 'refs';
  2142         41825  
71             *{"$into\::$_"} = $subs{$_} for keys %subs;
72             }
73              
74 63     63   230 sub _new {
75 63         157 my ($class, %params) = @_;
76 63 50       596 my $self = bless \%params, $class;
77 63         560 $self->init if $self->can('init');
78             $self;
79             }
80              
81             1;
82              
83             __END__