File Coverage

blib/lib/Acme/AirRead.pm
Criterion Covered Total %
statement 36 36 100.0
branch 5 6 83.3
condition n/a
subroutine 8 8 100.0
pod 0 3 0.0
total 49 53 92.4


line stmt bran cond sub pod time code
1             package Acme::AirRead;
2              
3 2     2   911 use strict;
  2         4  
  2         87  
4 2     2   9 use warnings;
  2         4  
  2         62  
5 2     2   8 no strict 'refs';
  2         4  
  2         1158  
6             our $VERSION = '0.05';
7             our $NO_READ = qr{air|luft};
8              
9             sub import {
10 2     2   17 my ($pkg) = caller(0);
11 2         6 *{ $pkg . '::read_air' } = \&read_air;
  2         10  
12 2         4 *{ $pkg . '::write_air' } = \&write_air;
  2         9  
13 2         4 *{ $pkg . '::empty_air' } = \&empty_air;
  2         1915  
14             }
15              
16             sub read_air {
17 8     8 0 2055 my ($pkg) = caller(0);
18 8         24 my $key = lc $_[0];
19 8 100       63 return if $key =~ $NO_READ;
20 4         8 my $namespace = $pkg . '::AirRead::attr';
21 4 100       35 if ( $namespace->can($_[0]) ) {
22 3         6 return *{ $pkg . '::AirRead::attr::' . $_[0] }->();
  3         12  
23             }
24             else {
25 1         3 return;
26             }
27             }
28              
29             sub write_air {
30 2     2 0 1462 my ($pkg) = caller(0);
31 2 50       9 return unless scalar @_;
32 2         10 my %args = @_;
33 2         15 foreach my $key ( sort keys %args ) {
34 7         13 my $val = $args{$key};
35 7     3   22 *{ $pkg . '::AirRead::attr::' . $key } = sub { $val };
  7         45  
  3         10  
36             }
37             }
38              
39             sub empty_air {
40 1     1 0 628 my ($pkg) = caller(0);
41 1         4 my $symbol_tbl = $pkg . '::AirRead::attr::';
42 1         5 foreach my $symbol ( keys %$symbol_tbl ) {
43 5         22 delete $symbol_tbl->{$symbol};
44             }
45             }
46              
47             1;
48             __END__