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   38 package Test2::Util::HashBase;
  6         11  
  6         162  
3 6     6   28 use strict;
  6         10  
  6         191  
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         11  
  6         447  
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   47 {
  6         14  
  6         549  
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   42 *_isa = ($] >= 5.010 && require mro) ? \&mro::get_linear_isa : sub {
  6         49  
  6         726  
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   3021 }
39             }
40              
41             my %STRIP = (
42             '^' => 1,
43             '-' => 1,
44             );
45              
46 108     108   2402 sub import {
47 108         222 my $class = shift;
48             my $into = caller;
49 108         555  
50 108   50     632 my $isa = _isa($into);
51             my $attr_subs = $Test2::Util::HashBase::ATTR_SUBS{$into} ||= {};
52             my %subs = (
53 90 100       640 ($into->can('new') ? () : (new => \&_new)),
  108         280  
54             (map %{$Test2::Util::HashBase::ATTR_SUBS{$_} || {}}, @{$isa}[1 .. $#$isa]),
55             (
56 108 100       1143 map {
  528         1106  
57 528         677 my $p = substr($_, 0, 1);
58 528 50       1018 my $x = $_;
59 528         1143 substr($x, 0, 1) = '' if $STRIP{$p};
60 0     0   0 my ($sub, $attr) = (uc $x, $x);
61 644     644   3389 $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   7058 : $p eq '^' ? ("set_$attr" => sub { Carp::carp("set_$attr() is deprecated"); $_[0]->{$attr} = $_[1] })
  101 50       293  
65             : ("set_$attr" => sub { $_[0]->{$attr} = $_[1] }),
66             } @_
67             ),
68             );
69 6     6   6552  
  6         16  
  6         1122  
70 108         744 no strict 'refs';
  2142         42313  
71             *{"$into\::$_"} = $subs{$_} for keys %subs;
72             }
73              
74 63     63   232 sub _new {
75 63         157 my ($class, %params) = @_;
76 63 50       533 my $self = bless \%params, $class;
77 63         535 $self->init if $self->can('init');
78             $self;
79             }
80              
81             1;
82              
83             __END__