Completed
Pull Request — master (#12)
by
unknown
12:17 queued 02:05
created

InMemoryRateLimiter::has()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
/**
3
 * This file is part of the Rate Limit package.
4
 *
5
 * Copyright (c) Nikola Posa
6
 *
7
 * For full copyright and license information, please refer to the LICENSE file,
8
 * located at the package root folder.
9
 */
10
11
declare(strict_types=1);
12
13
namespace RateLimit;
14
15
/**
16
 * @author Nikola Posa <[email protected]>
17
 */
18
final class InMemoryRateLimiter extends AbstractRateLimiter
19
{
20
    /**
21
     * @var array
22
     */
23
    protected $store = [];
24
25
    protected function get(string $key, int $default) : int
26
    {
27
        if (
28
            !$this->has($key)
29
            || $this->hasExpired($key)
30
        ) {
31
            return $default;
32
        }
33
34
        return $this->store[$key]['current'];
35
    }
36
37
    protected function init(string $key)
38
    {
39
        $this->store[$key] = [
40
            'current' => 1,
41
            'expires' => time() + $this->window,
42
        ];
43
    }
44
45
    protected function increment(string $key)
46
    {
47
        $this->store[$key]['current']++;
48
    }
49
50
    protected function ttl(string $key) : int
51
    {
52
        if (!isset($this->store[$key])) {
53
            return 0;
54
        }
55
56
        return max($this->store[$key]['expires'] - time(), 0);
57
    }
58
59
    private function has(string $key) : bool
60
    {
61
        return array_key_exists($key, $this->store);
62
    }
63
64
    private function hasExpired(string $key) : bool
65
    {
66
        return time() > $this->store[$key]['expires'];
67
    }
68
}
69