File Coverage

blib/lib/OpenStack/MetaAPI/Helpers/DataAsYaml.pm
Criterion Covered Total %
statement 24 25 96.0
branch 3 6 50.0
condition 3 5 60.0
subroutine 5 6 83.3
pod 0 3 0.0
total 35 45 77.7


line stmt bran cond sub pod time code
1             package OpenStack::MetaAPI::Helpers::DataAsYaml;
2              
3 6     6   41 use strict;
  6         12  
  6         163  
4 6     6   31 use warnings;
  6         10  
  6         127  
5              
6 6     6   28 use YAML::XS ();
  6         19  
  6         1197  
7              
8             our $_CACHE;
9              
10             ## TODO: publish this to CPAN as its own module
11              
12             ### FIXME publish as its own package
13             ### and provide one import function which can old its own cache
14              
15             sub LoadData {
16 6     6 0 40 my ($pkg) = @_;
17              
18 6   33     75 $pkg //= (caller(0))[0];
19              
20 6         22 return LoadDataFrom($pkg);
21             }
22              
23             sub LoadDataFrom {
24 14     14 0 34 my ($pkg) = @_;
25              
26 14 50       43 die "undefined package" unless defined $pkg;
27              
28 14   100     55 $_CACHE //= {};
29 14 50       40 return $_CACHE->{$pkg} if $_CACHE->{$pkg};
30              
31 14         26 my $data;
32             {
33 14         19 local $/;
  14         51  
34 14         740 my $fh = eval '\*' . $pkg . '::DATA';
35 14         381 $data = <$fh>;
36             }
37              
38 14 50       60 return unless defined $data;
39              
40 14         2060 $_CACHE->{$pkg} = YAML::XS::Load($data);
41              
42 14         133 return $_CACHE->{$pkg};
43             }
44              
45             sub clear_cache {
46 0     0 0   $_CACHE = {};
47             }
48              
49             1;
50              
51             __END__