CliResponder::getOutput()   A
last analyzed

Complexity

Conditions 2
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 2
c 1
b 1
f 0
dl 0
loc 5
rs 10
ccs 0
cts 0
cp 0
cc 2
nc 1
nop 2
crap 6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BEAR\Package\Provide\Transfer;
6
7
use BEAR\Resource\Code;
8
use BEAR\Resource\ResourceObject;
9
use BEAR\Sunday\Extension\Transfer\TransferInterface;
10
use BEAR\Sunday\Provide\Transfer\ConditionalResponseInterface;
11
use BEAR\Sunday\Provide\Transfer\HeaderInterface;
12
use BEAR\Sunday\Provide\Transfer\Output;
13
14
use const PHP_EOL;
15
16 1
final class CliResponder implements TransferInterface
17
{
18 1
    public function __construct(
19 1
        private HeaderInterface $header,
20 1
        private ConditionalResponseInterface $condResponse,
21
    ) {
22
    }
23 1
24 1
    /**
25
     * {@inheritDoc}
26 1
     */
27 1
    public function __invoke(ResourceObject $ro, array $server): void
28
    {
29
        /** @var array{HTTP_IF_NONE_MATCH?: string} $server */
30 1
        $isModified = $this->condResponse->isModified($ro, $server);
31
        $output = $isModified ? $this->getOutput($ro, $server) : $this->condResponse->getOutput($ro->headers);
32 1
33 1
        $statusText = (new Code())->statusText[$ro->code] ?? '';
34 1
        $ob = $output->code . ' ' . $statusText . PHP_EOL;
35
36
        // header
37
        foreach ($output->headers as $label => $value) {
38
            $ob .= "{$label}: {$value}" . PHP_EOL;
39
        }
40
41
        // empty line
42
        $ob .= PHP_EOL;
43
44
        // body
45
        $ob .= (string) $output->view;
46
47
        echo $ob;
48
    }
49
50
    /** @param array<string, string> $server */
51
    private function getOutput(ResourceObject $ro, array $server): Output
52
    {
53
        $ro->toString(); // set headers as well
54
55
        return new Output($ro->code, ($this->header)($ro, $server), (string) $ro->view ?: $ro->toString());
56
    }
57
}
58