ResourceListNodeSerializer::isSerializerFor()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 3
c 0
b 0
f 0
ccs 2
cts 2
cp 1
rs 10
nc 2
cc 2
eloc 2
nop 1
crap 2
1
<?php
2
3
namespace PPP\DataModel\Serializers;
4
5
use PPP\DataModel\ResourceListNode;
6
use Serializers\DispatchableSerializer;
7
use Serializers\Exceptions\UnsupportedObjectException;
8
use Serializers\Serializer;
9
10
/**
11
 * @licence AGPLv3+
12
 * @author Thomas Pellissier Tanon
13
 */
14
class ResourceListNodeSerializer implements DispatchableSerializer {
15
16
	/**
17
	 * @var Serializer
18
	 */
19
	private $resourceSerializer;
20
21
	/**
22
	 * @param Serializer $resourceSerializer
23
	 */
24 10
	public function __construct(Serializer $resourceSerializer) {
25 10
		$this->resourceSerializer = $resourceSerializer;
26 10
	}
27
	
28
	/**
29
	 * @see DispatchableSerializer::isSerializerFor
30
	 */
31 9
	public function isSerializerFor($object) {
32 9
		return is_object($object) && $object instanceof ResourceListNode;
33
	}
34
35
	/**
36
	 * @see Serializer::serialize
37
	 */
38 5
	public function serialize($object) {
39 5
		if(!$this->isSerializerFor($object)) {
40 3
			throw new UnsupportedObjectException($object, 'ResourceListNodeSerializer can only serialize ResourceListNode objects.');
41
		}
42
43 2
		return $this->getSerialization($object);
44
	}
45
46 2
	private function getSerialization(ResourceListNode $node) {
47 2
		if($node->count() === 1) {
48 1
			return $this->serializeAsResource($node);
49
		} else {
50 1
			return $this->serializeAsList($node);
51
		}
52
	}
53
54 1
	private function serializeAsResource(ResourceListNode $node) {
55 1
		foreach($node as $resource) {
56 1
			return $this->resourceSerializer->serialize($resource);
57
		}
58
	}
59
60 1
	private function serializeAsList(ResourceListNode $node) {
61 1
		$list = array();
62
63 1
		foreach($node as $resource) {
64 1
			$list[] = $this->resourceSerializer->serialize($resource);
65 1
		}
66
67
		return array(
68 1
			'type' => 'list',
69
			'list' => $list
70 1
		);
71
	}
72
}
73