Completed
Push — master ( f8807b...5769db )
by Nikola
06:22
created

GetQuotaPolicyViaPathPatternMap   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 26
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
dl 0
loc 26
c 0
b 0
f 0
wmc 4
lcom 1
cbo 3
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A forRequest() 0 12 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace RateLimit\Http;
6
7
use Assert\Assertion;
8
use Psr\Http\Message\ServerRequestInterface;
9
use RateLimit\QuotaPolicy;
10
11
final class GetQuotaPolicyViaPathPatternMap implements GetQuotaPolicy
12
{
13
    /** @var array */
14
    private $pathPatternQuotaPolicyMap;
15
16
    public function __construct(array $pathPatternQuotaPolicyMap)
17
    {
18
        Assertion::allString(array_keys($pathPatternQuotaPolicyMap));
19
        Assertion::allIsInstanceOf($pathPatternQuotaPolicyMap, QuotaPolicy::class);
20
21
        $this->pathPatternQuotaPolicyMap = $pathPatternQuotaPolicyMap;
22
    }
23
24
    public function forRequest(ServerRequestInterface $request): ?QuotaPolicy
25
    {
26
        $path = $request->getUri()->getPath();
27
28
        foreach ($this->pathPatternQuotaPolicyMap as $pattern => $quotaPolicy) {
29
            if (preg_match($pattern, $path)) {
30
                return $quotaPolicy;
31
            }
32
        }
33
34
        return null;
35
    }
36
}
37