SnakListDeserializer   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 90%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 3
dl 0
loc 59
ccs 18
cts 20
cp 0.9
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A deserialize() 0 7 2
A getDeserialized() 0 25 5
1
<?php
2
3
namespace Wikibase\DataModel\Deserializers;
4
5
use Deserializers\Deserializer;
6
use Deserializers\Exceptions\DeserializationException;
7
use Wikibase\DataModel\Snak\Snak;
8
use Wikibase\DataModel\Snak\SnakList;
9
10
/**
11
 * Package private
12
 *
13
 * @license GPL-2.0-or-later
14
 * @author Thomas Pellissier Tanon
15
 * @author Addshore
16
 */
17
class SnakListDeserializer implements Deserializer {
18
19
	/**
20
	 * @var Deserializer
21
	 */
22
	private $snakDeserializer;
23
24 46
	public function __construct( Deserializer $snakDeserializer ) {
25 46
		$this->snakDeserializer = $snakDeserializer;
26 46
	}
27
28
	/**
29
	 * @see Deserializer::deserialize
30
	 *
31
	 * @param array[] $serialization
32
	 *
33
	 * @throws DeserializationException
34
	 * @return SnakList
35
	 */
36 20
	public function deserialize( $serialization ) {
37 20
		if ( !is_array( $serialization ) ) {
38 1
			throw new DeserializationException( 'The SnakList serialization should be an array' );
39
		}
40
41 19
		return $this->getDeserialized( $serialization );
42
	}
43
44
	/**
45
	 * @param array[] $serialization
46
	 *
47
	 * @return SnakList
48
	 */
49 19
	private function getDeserialized( array $serialization ) {
50 19
		$snakList = new SnakList();
51
52 19
		foreach ( $serialization as $key => $snakArray ) {
53 14
			if ( is_string( $key ) ) {
54 14
				if ( !is_array( $snakArray ) ) {
55 2
					throw new DeserializationException(
56 2
						"The snaks per property \"$key\" should be an array"
57
					);
58
				}
59
60 12
				foreach ( $snakArray as $snakSerialization ) {
61
					/** @var Snak $snak */
62 12
					$snak = $this->snakDeserializer->deserialize( $snakSerialization );
63 12
					$snakList->addSnak( $snak );
64
				}
65
			} else {
66
				/** @var Snak $snak */
67
				$snak = $this->snakDeserializer->deserialize( $snakArray );
68
				$snakList->addSnak( $snak );
69
			}
70
		}
71
72 17
		return $snakList;
73
	}
74
75
}
76