Passed
Push — 1.0.x ( 54a243...6cfe9a )
by Koldo
02:32
created

IdentitySegment::toArray()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 1
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Pheature\Model\Toggle;
6
7
use Pheature\Core\Toggle\Read\Segment;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Pheature\Model\Toggle\Segment. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
8
9
final class IdentitySegment implements Segment
10
{
11
    private string $id;
12
    /**
13
     * @var array<string, mixed>
14
     */
15
    private array $criteria;
16
17
    /**
18
     * Segment constructor.
19
     *
20
     * @param string               $id
21
     * @param array<string, mixed> $criteria
22
     */
23 3
    public function __construct(string $id, array $criteria)
24
    {
25 3
        $this->id = $id;
26 3
        $this->criteria = $criteria;
27 3
    }
28
29
    public function id(): string
30
    {
31
        return $this->id;
32
    }
33
34
    /**
35
     * @return array<string, mixed>
36
     */
37
    public function criteria(): array
38
    {
39
        return $this->criteria;
40
    }
41
42 2
    public function match(array $payload): bool
43
    {
44 2
        if (false === array_key_exists('identity_id', $payload)) {
45
            return false;
46
        }
47
48
        /** @var string $identityId */
49 2
        $identityId = $payload['identity_id'];
50
51 2
        return in_array($identityId, $this->criteria, true);
52
    }
53
54
    /**
55
     * @return array<string, string|array>
56
     */
57 1
    public function toArray(): array
58
    {
59
        return [
60 1
            'id' => $this->id,
61 1
            'criteria' => $this->criteria,
62
        ];
63
    }
64
65
    /**
66
     * @return array<string, string|array>
67
     */
68
    public function jsonSerialize(): array
69
    {
70
        return $this->toArray();
71
    }
72
}
73