File Coverage

blib/lib/Data/Properties/YAML.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1            
2             package Data::Properties::YAML;
3            
4 1     1   25547 use strict;
  1         2  
  1         44  
5 1     1   6 use warnings 'all';
  1         2  
  1         47  
6 1     1   515 use YAML 'Load';
  0            
  0            
7            
8             our $VERSION = 0.04;
9            
10            
11             #====================================================================
12             sub new
13             {
14             my ($class, %args) = @_;
15            
16             if( $args{properties_file} )
17             {
18             my $yaml_file = $args{properties_file};
19             open my $ifh, '<', $yaml_file
20             or die "Cannot open '$yaml_file': $!";
21             my $data = '';
22             while( my $line = <$ifh> )
23             {
24             $line =~ s/\t/ /
25             while $line =~ m/\t/;
26             $data .= $line;
27             }# end while()
28             $args{data} = Load( $data );
29             $args{__name} = 'root';
30             }
31             elsif( $args{yaml_data} )
32             {
33             $args{data} = Load( $args{yaml_data} );
34             $args{__name} = 'root';
35             }# end if()
36            
37             my $s = bless \%args, $class;
38             if( ref($s->{data}) )
39             {
40             foreach my $key ( keys(%{ $s->{data} }) )
41             {
42             next unless ref($s->{data}->{$key});
43             $s->{$key} = ref($s)->new(
44             __name => "$s->{__name}.$key",
45             data => $s->{data}->{$key},
46             );
47             }# end foreach()
48             }# end if()
49            
50             # Finally:
51             return $s;
52             }# end new()
53            
54            
55             #====================================================================
56             sub AUTOLOAD
57             {
58             my $s = shift;
59             our $AUTOLOAD;
60            
61             my ($name) = $AUTOLOAD =~ m/::([^:]+)$/;
62             die "Node $s->{__name} has no property named '$name'"
63             unless exists( $s->{$name} ) || exists( $s->{data}->{$name} );
64            
65             return $s->{$name} || $s->{data}->{$name};
66             }# end AUTOLOAD()
67            
68             sub DESTROY { }
69            
70             1;# return true:
71            
72             __END__