Completed
Push — master ( 3a869f...beb3fd )
by John
12s
created

createResourceParametersFromArray()

Size

Total Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 1
ccs 0
cts 0
cp 0
c 0
b 0
f 0
nc 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
23 5
        self::checkRequestDataIsArray($requestData);
24
25 4
        $data = array_merge($request->getQueryData(), $requestData);
26
27 4
        return $this->createResourceParametersFromArray($data);
28
    }
29
30
    /**
31
     * @param APIRequest $request
32
     * @return ResourceParameters[]
33
     * @throws UnableToCreateResourceParametersException
34
     */
35 7
    public function createMultipleResourceParameters(APIRequest $request): array
36
    {
37 7
        $requestData = $request->getData() ?? [];
38
39 7
        self::checkRequestDataIsArray($requestData);
40
41 6
        $queryData = $request->getQueryData();
42
43 6
        return array_map(function($data) use ($queryData) {
44 4
            $data = array_merge($queryData, $data);
45 4
            return $this->createResourceParametersFromArray($data);
46 6
        }, $requestData);
47
    }
48
49
    /**
50
     * @param array|object|null $requestData
51
     * @throws UnableToCreateResourceParametersException
52
     */
53 12
    private static function checkRequestDataIsArray($requestData): void
54
    {
55 12
        if(!is_array($requestData)) {
56 2
            throw new UnableToCreateResourceParametersException("Unable to read request as array or null");
57
        }
58 10
    }
59
60
    /**
61
     * @param array $data
62
     * @return ResourceParameters
63
     */
64
    abstract protected function createResourceParametersFromArray(array $data): ResourceParameters;
65
66
}
67