Passed
Push — fixTravisHHVM ( 29be00...81ae42 )
by Marius
07:29 queued 04:42
created

EntityDeserializer::fromUnknownSerialization()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 15
ccs 8
cts 8
cp 1
rs 9.7666
c 0
b 0
f 0
cc 3
nc 3
nop 1
crap 3
1
<?php
2
3
namespace Wikibase\InternalSerialization\Deserializers;
4
5
use Deserializers\Deserializer;
6
use Deserializers\DispatchableDeserializer;
7
use Deserializers\Exceptions\DeserializationException;
8
use Wikibase\DataModel\Entity\EntityDocument;
9
10
/**
11
 * @license GPL-2.0-or-later
12
 * @author Jeroen De Dauw < [email protected] >
13
 * @author Thiemo Kreuz
14
 */
15
class EntityDeserializer implements Deserializer {
16
17
	/**
18
	 * @var DispatchableDeserializer
19
	 */
20
	private $legacyDeserializer;
21
22
	/**
23
	 * @var DispatchableDeserializer
24
	 */
25
	private $currentDeserializer;
26
27 11
	public function __construct(
28
		DispatchableDeserializer $legacyDeserializer,
29
		DispatchableDeserializer $currentDeserializer
30
	) {
31 11
		$this->legacyDeserializer = $legacyDeserializer;
32 11
		$this->currentDeserializer = $currentDeserializer;
33 11
	}
34
35
	/**
36
	 * @param array $serialization
37
	 *
38
	 * @return EntityDocument
39
	 * @throws DeserializationException
40
	 */
41 11
	public function deserialize( $serialization ) {
42 11
		if ( !is_array( $serialization ) ) {
43 2
			throw new DeserializationException( 'Entity serialization must be an array' );
44
		}
45
46 9
		if ( $this->currentDeserializer->isDeserializerFor( $serialization ) ) {
47 3
			return $this->currentDeserializer->deserialize( $serialization );
48 6
		} elseif ( $this->legacyDeserializer->isDeserializerFor( $serialization ) ) {
49 2
			return $this->legacyDeserializer->deserialize( $serialization );
50
		} else {
51 4
			return $this->fromUnknownSerialization( $serialization );
52
		}
53
	}
54
55 4
	private function fromUnknownSerialization( array $serialization ) {
56
		try {
57 4
			return $this->currentDeserializer->deserialize( $serialization );
58 3
		} catch ( DeserializationException $currentEx ) {
59
			try {
60 3
				return $this->legacyDeserializer->deserialize( $serialization );
61 2
			} catch ( DeserializationException $legacyEx ) {
62 2
				throw new DeserializationException(
63
					'The provided entity serialization is neither legacy ('
64 2
					. $legacyEx->getMessage() . ') nor current ('
65 2
					. $currentEx->getMessage() . ')'
66
				);
67
			}
68
		}
69
	}
70
71
}
72