Passed
Push — master ( 1624f2...3d792a )
by
unknown
01:39
created

SnakListSerializer   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 94.74%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 2
dl 0
loc 68
ccs 18
cts 19
cp 0.9474
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A isSerializerFor() 0 3 1
A getSerialized() 0 15 3
A serialize() 0 10 2
1
<?php
2
3
namespace Wikibase\DataModel\Serializers;
4
5
use Serializers\DispatchableSerializer;
6
use Serializers\Exceptions\SerializationException;
7
use Serializers\Exceptions\UnsupportedObjectException;
8
use Serializers\Serializer;
9
use Wikibase\DataModel\Snak\Snak;
10
use Wikibase\DataModel\Snak\SnakList;
11
12
/**
13
 * Package private
14
 *
15
 * @license GPL-2.0+
16
 * @author Thomas Pellissier Tanon
17
 */
18
class SnakListSerializer implements DispatchableSerializer {
19
20
	/**
21
	 * @var Serializer
22
	 */
23
	private $snakSerializer;
24
25
	/**
26
	 * @var bool
27
	 */
28
	private $useObjectsForMaps;
29
30
	/**
31
	 * @param Serializer $snakSerializer
32
	 * @param bool $useObjectsForMaps
33
	 */
34 48
	public function __construct( Serializer $snakSerializer, $useObjectsForMaps ) {
35 48
		$this->snakSerializer = $snakSerializer;
36 48
		$this->useObjectsForMaps = $useObjectsForMaps;
37 48
	}
38
39
	/**
40
	 * @see Serializer::isSerializerFor
41
	 *
42
	 * @param mixed $object
43
	 *
44
	 * @return bool
45
	 */
46 23
	public function isSerializerFor( $object ) {
47 23
		return $object instanceof SnakList;
48
	}
49
50
	/**
51
	 * @see Serializer::serialize
52
	 *
53
	 * @param SnakList $object
54
	 *
55
	 * @throws SerializationException
56
	 * @return array[]
57
	 */
58 18
	public function serialize( $object ) {
59 18
		if ( !$this->isSerializerFor( $object ) ) {
60 3
			throw new UnsupportedObjectException(
61
				$object,
62 3
				'SnakListSerializer can only serialize SnakList objects'
63
			);
64
		}
65
66 15
		return $this->getSerialized( $object );
67
	}
68
69 15
	private function getSerialized( SnakList $snaks ) {
70 15
		$serialization = array();
71
72
		/**
73
		 * @var Snak $snak
74
		 */
75 15
		foreach ( $snaks as $snak ) {
76 10
			$serialization[$snak->getPropertyId()->getSerialization()][] = $this->snakSerializer->serialize( $snak );
77
		}
78
79 15
		if ( $this->useObjectsForMaps ) {
80 1
			$serialization = (object)$serialization;
81
		}
82 15
		return $serialization;
83
	}
84
85
}
86