SeparatedElements   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 24
dl 0
loc 43
ccs 23
cts 23
cp 1
rs 10
c 0
b 0
f 0
wmc 8

3 Methods

Rating   Name   Duplication   Size   Complexity  
A pack() 0 10 2
A setDelimiters() 0 5 1
A unpack() 0 17 5
1
<?php
2
3
namespace kalanis\kw_mapper\Storage\Shared\FormatFiles;
4
5
6
use kalanis\kw_mapper\Interfaces\IFileFormat;
7
8
9
/**
10
 * Class SeparatedElements
11
 * @package kalanis\kw_mapper\Storage\Shared\FormatFiles
12
 * Formats/unpack content into/from table created by separated elements in file
13
 */
14
class SeparatedElements implements IFileFormat
15
{
16
    use TNl;
17
18
    protected string $delimitElements = '|';
19
    protected string $delimitLines = PHP_EOL;
20
21 1
    public function setDelimiters(string $elements = '|', string $lines = PHP_EOL): self
22
    {
23 1
        $this->delimitElements = $elements;
24 1
        $this->delimitLines = $lines;
25 1
        return $this;
26
    }
27
28 8
    public function unpack(string $content): array
29
    {
30 8
        $lines = explode($this->delimitLines, $content);
31 8
        $records = [];
32 8
        if (false !== $lines) {
33 8
            foreach ($lines as &$line) {
34 8
                if (empty($line)) {
35 8
                    continue;
36
                }
37
38 8
                $items = explode($this->delimitElements, strval($line));
39 8
                if (false !== $items) {
40 8
                    $records[] = array_map([$this, 'unescapeNl'], $items);
41
                }
42
            }
43
        }
44 8
        return $records;
45
    }
46
47 6
    public function pack(array $records): string
48
    {
49 6
        $lines = [];
50 6
        foreach ($records as &$record) {
51 6
            $record = (array) $record;
52 6
            ksort($record);
53 6
            $record[] = ''; // separator on end
54 6
            $lines[] = implode($this->delimitElements, array_map([$this, 'escapeNl'], $record));
55
        }
56 6
        return implode($this->delimitLines, $lines);
57
    }
58
}
59