File: | local/lib/perl5/Test/Deep/MM.pm |
Coverage: | 89.1% |
line | stmt | bran | cond | sub | time | code |
---|---|---|---|---|---|---|
1 | 6 6 6 | 13 4 83 | use strict; | |||
2 | 6 6 6 | 12 1 292 | use warnings; | |||
3 | ||||||
4 | package Test::Deep::MM; | |||||
5 | ||||||
6 | sub import | |||||
7 | { | |||||
8 | 6 | 4 | my $self = shift; | |||
9 | ||||||
10 | 6 | 10 | my ($pkg) = caller(); | |||
11 | 6 | 9 | my $mpkg = $pkg."::Methods"; | |||
12 | 6 | 7 | foreach my $attr (@_) | |||
13 | { | |||||
14 | 24 | 38 | if ($attr =~ /^[a-z]/) | |||
15 | { | |||||
16 | 6 6 6 | 13 10 372 | no strict 'refs'; | |||
17 | 12 12 12 | 9 37 13 | *{$mpkg."::$attr"} = \&{$attr}; | |||
18 | } | |||||
19 | else | |||||
20 | { | |||||
21 | 12 | 12 | my $get_name = $mpkg."::get$attr"; | |||
22 | 12 | 11 | my $set_name = $mpkg."::set$attr"; | |||
23 | my $get_sub = sub { | |||||
24 | 428 | 544 | return $_[0]->{$attr}; | |||
25 | 12 | 19 | }; | |||
26 | my $set_sub = sub { | |||||
27 | 54 | 77 | return $_[0]->{$attr} = $_[1]; | |||
28 | 12 | 12 | }; | |||
29 | ||||||
30 | { | |||||
31 | 6 6 6 12 | 13 3 527 8 | no strict 'refs'; | |||
32 | 12 | 23 | *$get_name = $get_sub; | |||
33 | 12 | 19 | *$set_name = $set_sub; | |||
34 | 12 12 | 6 944 | push(@{$pkg."::ISA"}, $mpkg); | |||
35 | } | |||||
36 | } | |||||
37 | } | |||||
38 | } | |||||
39 | ||||||
40 | sub new | |||||
41 | { | |||||
42 | 54 | 37 | my $pkg = shift; | |||
43 | ||||||
44 | 54 | 91 | my $self = bless {}, $pkg; | |||
45 | ||||||
46 | 54 | 88 | $self->init(@_); | |||
47 | ||||||
48 | 54 | 62 | return $self; | |||
49 | } | |||||
50 | ||||||
51 | sub init | |||||
52 | { | |||||
53 | 54 | 194 | my $self = shift; | |||
54 | ||||||
55 | 54 | 137 | while (@_) | |||
56 | { | |||||
57 | 0 | my $name = shift || confess("No name"); | ||||
58 | ||||||
59 | 0 | my $method = "set$name"; | ||||
60 | 0 | $self->$method(shift); | ||||
61 | } | |||||
62 | } | |||||
63 | ||||||
64 | 1; |