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   38 use strict;
  6         10  
  6         171  
4 6     6   29 use warnings;
  6         12  
  6         127  
5              
6 6     6   26 use YAML::XS ();
  6         23  
  6         1166  
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 41 my ($pkg) = @_;
17              
18 6   33     116 $pkg //= (caller(0))[0];
19              
20 6         24 return LoadDataFrom($pkg);
21             }
22              
23             sub LoadDataFrom {
24 14     14 0 40 my ($pkg) = @_;
25              
26 14 50       46 die "undefined package" unless defined $pkg;
27              
28 14   100     58 $_CACHE //= {};
29 14 50       42 return $_CACHE->{$pkg} if $_CACHE->{$pkg};
30              
31 14         27 my $data;
32             {
33 14         21 local $/;
  14         51  
34 14         759 my $fh = eval '\*' . $pkg . '::DATA';
35 14         402 $data = <$fh>;
36             }
37              
38 14 50       61 return unless defined $data;
39              
40 14         2097 $_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__