Passed
Pull Request — master (#8)
by Kevin
18:24
created

LockingExtension   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 6
eloc 14
c 0
b 0
f 0
dl 0
loc 35
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A releaseLock() 0 6 2
A __construct() 0 3 1
A acquireLock() 0 15 3
1
<?php
2
3
namespace Zenstruck\ScheduleBundle\Schedule\Extension;
4
5
use Symfony\Component\Lock\LockFactory;
6
use Symfony\Component\Lock\LockInterface;
7
8
/**
9
 * @author Kevin Bond <[email protected]>
10
 */
11
abstract class LockingExtension
12
{
13
    private $ttl;
14
15
    /** @var LockInterface|null */
16
    private $lock;
17
18
    public function __construct(int $ttl)
19
    {
20
        $this->ttl = $ttl;
21
    }
22
23
    final public function acquireLock(LockFactory $lockFactory, string $mutex): bool
24
    {
25
        if (null !== $this->lock) {
26
            throw new \LogicException('A lock is already in place.');
27
        }
28
29
        $this->lock = $lockFactory->createLock('symfony-schedule-'.$mutex, $this->ttl);
30
31
        if ($this->lock->acquire()) {
32
            return true;
33
        }
34
35
        $this->lock = null;
36
37
        return false;
38
    }
39
40
    final public function releaseLock(): void
41
    {
42
        if ($this->lock) {
43
            $this->lock->release();
44
45
            $this->lock = null;
46
        }
47
    }
48
}
49