ApiRequestFactory::createHttpRequest()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 9
ccs 6
cts 6
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
namespace kalanis\Restful\Http;
4
5
6
use Nette\Http\IRequest;
7
use Nette\Http\Request;
8
use Nette\Http\RequestFactory;
9
10
11
/**
12
 * Api request factory
13
 */
14
class ApiRequestFactory
15
{
16
17
    public const OVERRIDE_HEADER = 'X-HTTP-Method-Override';
18
    public const OVERRIDE_PARAM = '__method';
19
20 1
    public function __construct(
21
        private readonly RequestFactory $factory,
22
    )
23
    {
24 1
    }
25
26
    /**
27
     * Create API HTTP request
28
     * @return IRequest
29
     */
30
    public function createHttpRequest(): IRequest
31
    {
32 1
        $request = $this->factory->fromGlobals();
33 1
        $url = $request->getUrl()->withQuery($request->getQuery());
34
35 1
        return new Request(
36 1
            $url, (array) $request->getPost(), $request->getFiles(), $request->getCookies(), $request->getHeaders(),
37 1
            $this->getPreferredMethod($request), $request->getRemoteAddress(), null,
38 1
            fn(): ?string => $request->getRawBody()
39 1
        );
40
    }
41
42
    /**
43
     * Get preferred method
44
     */
45
    protected function getPreferredMethod(IRequest $request): string
46
    {
47 1
        $method = $request->getMethod();
48 1
        $isPost = IRequest::Post === $method;
49 1
        $header = $request->getHeader(self::OVERRIDE_HEADER);
50 1
        $param = $request->getQuery(self::OVERRIDE_PARAM);
51 1
        if ($header && $isPost) {
52 1
            return $header;
53
        }
54 1
        if ($param && $isPost) {
55 1
            return strval($param);
56
        }
57 1
        return $request->getMethod();
58
    }
59
}
60