File Coverage

blib/lib/Class/AutoAccess/Deep.pm
Criterion Covered Total %
statement 23 24 95.8
branch 9 10 90.0
condition 2 3 66.6
subroutine 6 6 100.0
pod 1 1 100.0
total 41 44 93.1


line stmt bran cond sub pod time code
1             #$Id: Deep.pm 25 2005-09-11 09:48:14Z kentaro $
2              
3             package Class::AutoAccess::Deep;
4              
5 2     2   72877 use strict;
  2         5  
  2         67  
6              
7 2     2   12 use Carp ();
  2         3  
  2         645  
8              
9             our $AUTOLOAD;
10             our $VERSION = '0.02';
11              
12             sub new {
13 4     4 1 69 my ($class, $fields) = @_;
14              
15 4 100 66     21 _croak('argument must be passed in as hashref')
16             unless defined $fields || ref $fields eq 'HASH';
17              
18 3         15 return bless $fields, $class;
19             }
20              
21             sub AUTOLOAD {
22 8     8   937 my $self = shift;
23 8         36 (my $field = $AUTOLOAD) =~ s/.*:://;
24              
25 8 50       24 return if $field eq 'DESTROY';
26              
27             # XXX
28             # croaks when you attempt to access an undefined field
29             # do you need this feature?
30 8 100       29 _croak("Field $field does not exists")
31             unless exists $self->{$field};
32              
33 7 100       23 if (@_) {
34 2         6 $self->{$field} = _get_linkedobj($_[0]);
35             }
36             else {
37 5         14 $self->{$field} = _get_linkedobj($self->{$field});
38             }
39              
40 7         33 return $self->{$field};
41             }
42              
43             sub _get_linkedobj {
44 7     7   9 my $value= shift;
45              
46 7 100       15 if (ref($value) eq 'HASH'){
47 1         6 return __PACKAGE__->new($value);
48             }
49             else {
50 6         14 return $value;
51             }
52             }
53              
54             sub _croak {
55 2     2   3 my $msg = shift;
56 2         36 Carp::croak($msg);
57              
58 0           return;
59             }
60              
61             1;
62              
63             __END__