Passed
Push — scalar-object ( b04816...565017 )
by Akihito
02:45
created

QueryProp::getProp()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 15
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 7
nc 3
nop 3
dl 0
loc 15
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BEAR\Resource;
6
7
use BEAR\Resource\Exception\ParameterException;
8
use Ray\Di\InjectorInterface;
9
10
use function ltrim;
11
use function preg_replace;
12
use function strtolower;
13
14
final class QueryProp
15
{
16
    /**
17
     * @param array<string, mixed> $query
18
     *
19
     * @return mixed
20
     */
21
    public function getProp(string $varName, array $query, InjectorInterface $injector): mixed
22
    {
23
        if (isset($query[$varName])) {
24
            return $query[$varName];
25
        }
26
27
        // try camelCase variable name
28
        $snakeName = ltrim(strtolower((string) preg_replace('/[A-Z]/', '_\0', $varName)), '_');
29
        if (isset($query[$snakeName])) {
30
            return $query[$snakeName];
31
        }
32
33
        unset($injector);
34
35
        throw new ParameterException($varName);
36
    }
37
}
38