Passed
Push — master ( 9ae635...1c5d16 )
by Chema
01:22 queued 12s
created

ConsolePrinter::printSegment()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 7
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 10
ccs 0
cts 9
cp 0
crap 6
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace EdifactParser\IO;
6
7
use EdifactParser\Segments\SegmentInterface;
8
use EdifactParser\TransactionMessage;
9
10
final class ConsolePrinter implements PrinterInterface
11
{
12
    /** @var string[] */
13
    private array $segmentNames;
14
15
    public static function createWithHeaders(array $segmentNames): self
16
    {
17
        return new self($segmentNames);
18
    }
19
20
    private function __construct(array $segmentNames)
21
    {
22
        $this->segmentNames = $segmentNames;
23
    }
24
25
    public function printMessage(TransactionMessage $message): void
26
    {
27
        foreach ($this->segmentNames as $segmentName) {
28
            $this->printSegment($message->segmentByName($segmentName));
29
        }
30
    }
31
32
    /** @var SegmentInterface[] */
33
    private function printSegment(array $segments): void
34
    {
35
        $first = $segments[array_key_first($segments)];
36
        print sprintf("> %s:\n", $first->tag());
37
38
        foreach ($segments as $segment) {
39
            print sprintf(
40
                "    %s |> %s \n",
41
                str_pad($segment->subId(), 3),
42
                json_encode($segment->rawValues())
43
            );
44
        }
45
    }
46
}
47