Completed
Push — master ( fbc42e...4f026e )
by Jonas
21:13
created

BucketManager::getAll()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
declare(strict_types=1);
3
4
/*
5
 * This file is part of SteamScore.
6
 *
7
 * (c) SteamScore <[email protected]>
8
 *
9
 * This Source Code Form is subject to the terms of the Mozilla Public
10
 * License, v. 2.0. If a copy of the MPL was not distributed with this
11
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
12
 */
13
14
namespace SteamScore\Api\Domain\Managers;
15
16
use bandwidthThrottle\tokenBucket\Rate;
17
use bandwidthThrottle\tokenBucket\storage\PredisStorage;
18
use bandwidthThrottle\tokenBucket\TokenBucket;
19
use Predis\ClientInterface;
20
use SteamScore\Api\Domain\Exceptions\InvalidBucketException;
21
use SteamScore\Api\Domain\Interfaces\BucketManagerInterface;
22
23
final class BucketManager implements BucketManagerInterface
24
{
25
    /**
26
     * @var array
27
     */
28
    private $buckets = [];
29
30
    /**
31
     * Constructor.
32
     *
33
     * @param ClientInterface $client
34
     * @param array           $buckets
35
     */
36
    public function __construct(ClientInterface $client, array $buckets)
37
    {
38
        foreach ($buckets as $name => $bucket) {
39
            $storage = new PredisStorage(sprintf('bucket:%s', $name), $client);
0 ignored issues
show
Compatibility introduced by
$client of type object<Predis\ClientInterface> is not a sub-type of object<Predis\Client>. It seems like you assume a concrete implementation of the interface Predis\ClientInterface to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
40
            $rate = new Rate($bucket['tokens'], $bucket['unit']);
41
            $this->buckets[$name] = new TokenBucket($bucket['capacity'], $rate, $storage);
42
        }
43
    }
44
45
    /**
46
     * {@inheritdoc}
47
     */
48
    public function getAll(): array
49
    {
50
        return $this->buckets;
51
    }
52
53
    /**
54
     * {@inheritdoc}
55
     */
56
    public function getByName(string $name): TokenBucket
57
    {
58
        if (array_key_exists($name, $this->buckets) === false) {
59
            throw new InvalidBucketException(sprintf('Unknown bucket "%s"', $name));
60
        }
61
62
        return $this->buckets[$name];
63
    }
64
}
65