File Coverage

blib/lib/Package/Strictures/Registry.pm
Criterion Covered Total %
statement 44 46 95.6
branch 6 10 60.0
condition n/a
subroutine 15 15 100.0
pod 4 4 100.0
total 69 75 92.0


line stmt bran cond sub pod time code
1 6     6   1228 use 5.008; # 8 = utf8, 6 = pragmas, our, 5 = list undef.
  6         20  
  6         241  
2 6     6   32 use strict;
  6         12  
  6         187  
3 6     6   29 use warnings;
  6         12  
  6         147  
4 6     6   1129 use utf8;
  6         22  
  6         33  
5              
6             package Package::Strictures::Registry;
7             $Package::Strictures::Registry::VERSION = '1.000000';
8             # ABSTRACT: Data Storage name-space for stricture parameters.
9              
10             our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
11              
12 6     6   528 use Carp ();
  6         13  
  6         3997  
13              
14             my $_registry_store = {};
15              
16             sub _has_package {
17 7     7   15 my ( undef, $package ) = @_;
18 7         45 return exists $_registry_store->{$package};
19             }
20              
21             sub _set_package {
22 2     2   6 my ( undef, $package, $value ) = @_;
23 2         7 return $_registry_store->{$package} = $value;
24             }
25              
26             sub _get_package {
27 8     8   18 my ( undef, $package ) = @_;
28 8         52 return $_registry_store->{$package};
29             }
30              
31             my $_advertisements = {};
32              
33             sub _has_advert {
34 3     3   9 my ( undef, $package ) = @_;
35 3         18 return exists $_advertisements->{$package};
36             }
37              
38             sub _set_advert {
39 3     3   8 my ( undef, $package, $value ) = @_;
40 3         11 return $_advertisements->{$package} = $value;
41             }
42              
43             sub _get_advert {
44 6     6   10 my ( undef, $package ) = @_;
45 6         24 return $_advertisements->{$package};
46             }
47              
48              
49              
50              
51              
52              
53              
54              
55              
56              
57              
58              
59              
60              
61             sub advertise_value {
62 3     3 1 20 my ( $self, $package, $name ) = @_;
63 3 50       14 if ( not $self->_has_advert($package) ) {
64 3         19 $self->_set_advert( $package, {} );
65             }
66 3 50       24 if ( not exists $self->_get_advert($package)->{$name} ) {
67 3         14 $self->_get_advert($package)->{$name} = \$name;
68             }
69             else {
70 0         0 Carp::croak("` $package :: $name` is already advertised!");
71             }
72 3         12 return;
73             }
74              
75              
76              
77              
78              
79              
80              
81              
82              
83              
84              
85             sub has_value {
86 5     5 1 13 my ( $self, $package, $name ) = @_;
87 5 100       23 return unless ( $self->_has_package($package) );
88 4         18 return exists $self->_get_package($package)->{$name};
89             }
90              
91              
92              
93              
94              
95              
96              
97              
98              
99              
100              
101              
102             sub get_value {
103 2     2 1 8 my ( $self, $package, $name ) = @_;
104 2 50       7 if ( not $self->has_value( $package, $name ) ) {
105 0         0 Carp::croak("Error: package `$package` is not in the registry");
106             }
107 2         9 return $self->_get_package($package)->{$name};
108             }
109              
110              
111              
112              
113              
114              
115              
116              
117              
118              
119              
120             sub set_value {
121 2     2 1 6 my ( $self, $package, $name, $value ) = @_;
122 2 50       10 if ( not $self->_has_package($package) ) {
123 2         8 $self->_set_package( $package, {} );
124             }
125 2         10 $self->_get_package($package)->{$name} = $value;
126 2         10 return;
127             }
128              
129             1;
130              
131             __END__