File Coverage

blib/lib/Data/Keys/E/Locking.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::Locking;
2              
3             =head1 NAME
4              
5             Data::Keys::E::Locking - get/set locking
6              
7             =head1 DESCRIPTION
8              
9             Generic locking for set and get functions. Need an extension that is
10             implementing C<lock_sh>, C<lock_ex> and C<unlock>.
11              
12             =cut
13              
14 5     5   5865 use warnings;
  5         10  
  5         215  
15 5     5   26 use strict;
  5         9  
  5         224  
16              
17             our $VERSION = '0.04';
18              
19 5     5   28 use Moose::Role;
  5         8  
  5         35  
20              
21             requires('get', 'set', 'lock_ex', 'lock_sh', 'unlock');
22              
23             around 'get' => sub {
24             my $get = shift;
25             my $self = shift;
26             my $key = shift;
27              
28             eval { $self->lock_sh($key) };
29             return if $@;
30              
31             my $value = $self->$get($key);
32              
33             $self->unlock($key);
34              
35             return $value;
36             };
37              
38             around 'set' => sub {
39             my $set = shift;
40             my $self = shift;
41             my $key = shift;
42             my $value = shift;
43            
44             $self->lock_ex($key, 1);
45            
46             # call set
47             my $ret = $self->$set($key, $value);
48            
49             $self->unlock($key);
50            
51             return $ret;
52             };
53              
54             1;
55              
56              
57             __END__
58              
59             =head1 AUTHOR
60              
61             Jozef Kutej
62              
63             =cut