File Coverage

blib/lib/Data/Keys/E/Key/AutoLock.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             package Data::Keys::E::Key::AutoLock;
2              
3             =head1 NAME
4              
5             Data::Keys::E::Key::AutoLock - lock keys automatically
6              
7             =head1 DESCRIPTION
8              
9             Calls C<$self->lock_sh> before each C<get>, calls C<$self->lock_ex> before
10             each C<set>. Afterwards calls C<$self->unlock>.
11              
12             =cut
13              
14 1     1   788 use warnings;
  1         1  
  1         29  
15 1     1   3 use strict;
  1         1  
  1         29  
16              
17             our $VERSION = '0.03';
18              
19 1     1   3 use Moose::Role;
  1         1  
  1         5  
20              
21             requires('set', 'get', 'lock_sh', 'lock_ex', 'unlock');
22              
23             around 'get' => sub {
24             my $get = shift;
25             my $self = shift;
26             my $key = shift;
27              
28             $self->lock_sh($key);
29             my $value = $self->$get($key);
30             $self->unlock($key);
31             return $value;
32             };
33              
34             around 'set' => sub {
35             my $set = shift;
36             my $self = shift;
37             my $key = shift;
38             my $value = shift;
39            
40             $self->lock_ex($key);
41             my $new_key = $self->$set($key, $value);
42             $self->unlock($key);
43             return $new_key;
44             };
45              
46             1;
47              
48              
49             __END__
50              
51             =head1 AUTHOR
52              
53             Jozef Kutej
54              
55             =cut