createResourceParameters()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 11
ccs 6
cts 6
cp 1
rs 9.4285
cc 1
eloc 6
nc 1
nop 1
crap 1
1
<?php
2
namespace LunixREST\Server\Router\Endpoint\ResourceEndpoint;
3
4
use LunixREST\Server\APIRequest\APIRequest;
5
use LunixREST\Server\Router\Endpoint\ResourceEndpoint\Exceptions\UnableToCreateResourceParametersException;
6
7
/**
8
 * An implementation of a ResourceParametersFactory that assumes that the request data is an associative array. Joins url parameters with body.
9
 * Class ArrayResourceParametersFactory
10
 * @package LunixREST\Server\Router\Endpoint\ResourceEndpoint
11
 */
12
abstract class ArrayResourceParametersFactory implements ResourceParametersFactory
13
{
14
    /**
15
     * @param APIRequest $request
16
     * @return ResourceParameters
17
     * @throws UnableToCreateResourceParametersException
18
     */
19 5
    public function createResourceParameters(APIRequest $request): ResourceParameters
20
    {
21 5
        $requestData = $request->getData() ?? [];
22 5
        $requestElement = $request->getElement();
23
24 5
        self::checkRequestDataIsArray($requestData);
25
26 4
        $data = array_merge($request->getQueryData(), $requestData);
27
28 4
        return $this->createResourceParametersFromArray($requestElement, $data);
29
    }
30
31
    /**
32
     * @param APIRequest $request
33
     * @return ResourceParameters[]
34
     * @throws UnableToCreateResourceParametersException
35
     */
36 7
    public function createMultipleResourceParameters(APIRequest $request): array
37
    {
38 7
        $requestData = $request->getData() ?? [];
39 7
        $requestElement = $request->getElement();
40
41 7
        self::checkRequestDataIsArray($requestData);
42
43 6
        $queryData = $request->getQueryData();
44
45 6
        return array_map(function($data) use ($queryData, $requestElement) {
46 4
            $data = array_merge($queryData, $data);
47 4
            return $this->createResourceParametersFromArray($requestElement, $data);
48 6
        }, $requestData);
49
    }
50
51
    /**
52
     * @param array|object|null $requestData
53
     * @throws UnableToCreateResourceParametersException
54
     */
55 12
    private static function checkRequestDataIsArray($requestData): void
56
    {
57 12
        if(!is_array($requestData)) {
58 2
            throw new UnableToCreateResourceParametersException("Unable to read request as array or null");
59
        }
60 10
    }
61
62
    /**
63
     * @param string $element
64
     * @param array $data
65
     * @return ResourceParameters
66
     */
67
    abstract protected function createResourceParametersFromArray($element, array $data): ResourceParameters;
68
69
}
70