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

ConsolePrinter   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 13
c 2
b 0
f 0
dl 0
loc 33
ccs 0
cts 23
cp 0
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A printMessage() 0 4 2
A __construct() 0 3 1
A printSegment() 0 10 2
A createWithHeaders() 0 3 1
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