Passed
Push — master ( c85748...2fd0ab )
by Petr
08:11
created

SeparatedElements::setDelimiters()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 2
dl 0
loc 5
ccs 4
cts 4
cp 1
crap 1
rs 10
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
    /** @var string */
19
    protected $delimitElements = '|';
20
    /** @var string */
21
    protected $delimitLines = PHP_EOL;
22
23 1
    public function setDelimiters(string $elements = '|', string $lines = PHP_EOL): self
24
    {
25 1
        $this->delimitElements = $elements;
26 1
        $this->delimitLines = $lines;
27 1
        return $this;
28
    }
29
30 5
    public function unpack(string $content): array
31
    {
32 5
        $lines = explode($this->delimitLines, $content);
33 5
        $records = [];
34 5
        if (false !== $lines) {
35 5
            foreach ($lines as &$line) {
36 5
                if (empty($line)) {
37 5
                    continue;
38
                }
39
40 5
                $items = explode($this->delimitElements, strval($line));
41 5
                if (false !== $items) {
42 5
                    $records[] = array_map([$this, 'unescapeNl'], $items);
43
                }
44
            }
45
        }
46 5
        return $records;
47
    }
48
49 6
    public function pack(array $records): string
50
    {
51 6
        $lines = [];
52 6
        foreach ($records as &$record) {
53 6
            $record = (array) $record;
54 6
            ksort($record);
55 6
            $record[] = ''; // separator on end
56 6
            $lines[] = implode($this->delimitElements, array_map([$this, 'escapeNl'], $record));
57
        }
58 6
        return implode($this->delimitLines, $lines);
59
    }
60
}
61