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

SnakSerializer   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 95%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 5
dl 0
loc 69
ccs 19
cts 20
cp 0.95
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 16 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\PropertyValueSnak;
10
use Wikibase\DataModel\Snak\Snak;
11
12
/**
13
 * Package private
14
 *
15
 * @license GPL-2.0+
16
 * @author Thomas Pellissier Tanon
17
 * @author Addshore
18
 */
19
class SnakSerializer implements DispatchableSerializer {
20
21
	/**
22
	 * @var Serializer
23
	 */
24
	private $dataValueSerializer;
25
26
	/**
27
	 * @var bool
28
	 */
29
	private $serializeWithHash;
30
31
	/**
32
	 * @param Serializer $dataValueSerializer
33
	 * @param bool $serializeWithHash
34
	 */
35 57
	public function __construct( Serializer $dataValueSerializer, $serializeWithHash = true ) {
36 57
		$this->dataValueSerializer = $dataValueSerializer;
37 57
		$this->serializeWithHash = $serializeWithHash;
38 57
	}
39
40
	/**
41
	 * @see Serializer::isSerializerFor
42
	 *
43
	 * @param mixed $object
44
	 *
45
	 * @return bool
46
	 */
47 37
	public function isSerializerFor( $object ) {
48 37
		return $object instanceof Snak;
49
	}
50
51
	/**
52
	 * @see Serializer::serialize
53
	 *
54
	 * @param Snak $object
55
	 *
56
	 * @throws SerializationException
57
	 * @return array
58
	 */
59 31
	public function serialize( $object ) {
60 31
		if ( !$this->isSerializerFor( $object ) ) {
61 3
			throw new UnsupportedObjectException(
62
				$object,
63 3
				'SnakSerializer can only serialize Snak objects'
64
			);
65
		}
66
67 28
		return $this->getSerialized( $object );
68
	}
69
70 28
	private function getSerialized( Snak $snak ) {
71
		$serialization = array(
72 28
			'snaktype' => $snak->getType(),
73 28
			'property' => $snak->getPropertyId()->getSerialization(),
74
		);
75
76 28
		if ( $this->serializeWithHash ) {
77 25
			$serialization['hash'] = $snak->getHash();
78
		}
79
80 28
		if ( $snak instanceof PropertyValueSnak ) {
81 5
			$serialization['datavalue'] = $this->dataValueSerializer->serialize( $snak->getDataValue() );
82
		}
83
84 28
		return $serialization;
85
	}
86
87
}
88