Completed
Pull Request — master (#227)
by Leszek
06:12 queued 04:09
created

SnakListDeserializer::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 3
ccs 3
cts 3
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 1
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+
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
	/**
25
	 * @param Deserializer $snakDeserializer
26
	 */
27 46
	public function __construct( Deserializer $snakDeserializer ) {
28 46
		$this->snakDeserializer = $snakDeserializer;
29 46
	}
30
31
	/**
32
	 * @see Deserializer::deserialize
33
	 *
34
	 * @param array[] $serialization
35
	 *
36
	 * @throws DeserializationException
37
	 * @return SnakList
38
	 */
39 20
	public function deserialize( $serialization ) {
40 20
		if ( !is_array( $serialization ) ) {
41 1
			throw new DeserializationException( 'The SnakList serialization should be an array' );
42
		}
43
44 19
		return $this->getDeserialized( $serialization );
45
	}
46
47
	/**
48
	 * @param array[] $serialization
49
	 *
50
	 * @return SnakList
51
	 */
52 19
	private function getDeserialized( array $serialization ) {
53 19
		$snakList = new SnakList();
54
55 19
		foreach ( $serialization as $key => $snakArray ) {
56 14
			if ( is_string( $key ) ) {
57 14
				if ( !is_array( $snakArray ) ) {
58 2
					throw new DeserializationException( "The snaks per property \"$key\" should be an array" );
59
				}
60
61 12
				foreach ( $snakArray as $snakSerialization ) {
62
					/** @var Snak $snak */
63 12
					$snak = $this->snakDeserializer->deserialize( $snakSerialization );
64 12
					$snakList->addSnak( $snak );
65
				}
66
			} else {
67
				/** @var Snak $snak */
68
				$snak = $this->snakDeserializer->deserialize( $snakArray );
69 12
				$snakList->addSnak( $snak );
70
			}
71
		}
72
73 17
		return $snakList;
74
	}
75
76
}
77