ArraySerialiser::serialiseEntities()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 7
c 0
b 0
f 0
nc 3
nop 1
dl 0
loc 14
ccs 9
cts 9
cp 1
crap 3
rs 10
1
<?php
2
/**
3
 * This file is part of graze/unicontroller-client.
4
 *
5
 * Copyright (c) 2016 Nature Delivered Ltd. <https://www.graze.com>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 *
10
 * @license https://github.com/graze/unicontroller-client/blob/master/LICENSE.md
11
 * @link https://github.com/graze/unicontroller-client
12
 */
13
namespace Graze\UnicontrollerClient\Serialiser;
14
15
use Graze\UnicontrollerClient\Serialiser\SerialiserResolver;
16
17
class ArraySerialiser
18
{
19
    /**
20
     * @var SerialiserResolver
21
     */
22
    private $serialiserResolver;
23
24
    /**
25
     * @param SerialiserResolver $serialiserResolver
26
     */
27 20
    public function __construct(SerialiserResolver $serialiserResolver)
28
    {
29 20
        $this->serialiserResolver = $serialiserResolver;
30 20
    }
31
32
    /**
33
     * @param array $entities
34
     * @param string $itemName
35
     * @return string
36
     */
37 3
    public function serialise(array $entities, $itemName)
38
    {
39 3
        $entitiesSerialised = $this->serialiseEntities($entities);
40 3
        return sprintf(
41 3
            "\x02%s\x03,%d,\r\n%s",
42 3
            $itemName,
43 3
            count($entities),
44
            $entitiesSerialised
45 3
        );
46
    }
47
48
    /**
49
     * @param array $entities
50
     * @return string
51
     */
52 3
    private function serialiseEntities(array $entities)
53
    {
54 3
        if (count($entities) == 0) {
55 1
            return '';
56
        }
57
58 3
        $serialiser = $this->serialiserResolver->resolve(reset($entities));
59
60 3
        $serialised = [];
61 3
        foreach ($entities as $entity) {
62 3
            $serialised[] = sprintf("\t%s", $serialiser->serialise($entity));
63 3
        }
64
65 3
        return sprintf("%s\r\n", implode("\r\n", $serialised));
66
    }
67
68
    /**
69
     * @return ArraySerialiser
70
     */
71 19
    public static function factory()
72
    {
73 19
        return new static(
74 19
            new SerialiserResolver()
75 19
        );
76
    }
77
}
78