Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
86.21% |
25 / 29 |
|
83.33% |
5 / 6 |
CRAP | |
0.00% |
0 / 1 |
MediaInfoDeserializer | |
86.21% |
25 / 29 |
|
83.33% |
5 / 6 |
11.32 | |
0.00% |
0 / 1 |
__construct | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
1 | |||
deserialize | |
100.00% |
7 / 7 |
|
100.00% |
1 / 1 |
1 | |||
deserializeId | |
55.56% |
5 / 9 |
|
0.00% |
0 / 1 |
3.79 | |||
deserializeLabels | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
2 | |||
deserializeDescriptions | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
2 | |||
deserializeStatements | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace Wikibase\MediaInfo\DataModel\Serialization; |
4 | |
5 | use Deserializers\Deserializer; |
6 | use Deserializers\Exceptions\DeserializationException; |
7 | use Deserializers\TypedObjectDeserializer; |
8 | use InvalidArgumentException; |
9 | use Wikibase\DataModel\Statement\StatementList; |
10 | use Wikibase\DataModel\Term\TermList; |
11 | use Wikibase\MediaInfo\DataModel\MediaInfo; |
12 | use Wikibase\MediaInfo\DataModel\MediaInfoId; |
13 | |
14 | /** |
15 | * @license GPL-2.0-or-later |
16 | * @author Bene* < benestar.wikimedia@gmail.com > |
17 | */ |
18 | class MediaInfoDeserializer extends TypedObjectDeserializer { |
19 | /** |
20 | * @var Deserializer |
21 | */ |
22 | private $idDeserializer; |
23 | |
24 | /** |
25 | * @var Deserializer |
26 | */ |
27 | private $termListDeserializer; |
28 | |
29 | /** |
30 | * @var Deserializer |
31 | */ |
32 | private $statementListDeserializer; |
33 | |
34 | /** |
35 | * @param Deserializer $idDeserializer |
36 | * @param Deserializer $termListDeserializer |
37 | * @param Deserializer $statementListDeserializer |
38 | */ |
39 | public function __construct( |
40 | Deserializer $idDeserializer, |
41 | Deserializer $termListDeserializer, |
42 | Deserializer $statementListDeserializer |
43 | ) { |
44 | parent::__construct( 'mediainfo', 'type' ); |
45 | |
46 | $this->idDeserializer = $idDeserializer; |
47 | $this->termListDeserializer = $termListDeserializer; |
48 | $this->statementListDeserializer = $statementListDeserializer; |
49 | } |
50 | |
51 | /** |
52 | * @param mixed $serialization |
53 | * |
54 | * @throws DeserializationException |
55 | * @return MediaInfo |
56 | */ |
57 | public function deserialize( $serialization ) { |
58 | $this->assertCanDeserialize( $serialization ); |
59 | |
60 | return new MediaInfo( |
61 | $this->deserializeId( $serialization ), |
62 | $this->deserializeLabels( $serialization ), |
63 | $this->deserializeDescriptions( $serialization ), |
64 | $this->deserializeStatements( $serialization ) |
65 | ); |
66 | } |
67 | |
68 | /** |
69 | * @param array $serialization |
70 | * |
71 | * @return MediaInfoId|null |
72 | */ |
73 | private function deserializeId( array $serialization ) { |
74 | if ( array_key_exists( 'id', $serialization ) ) { |
75 | $id = $this->idDeserializer->deserialize( $serialization['id'] ); |
76 | |
77 | if ( !$id instanceof MediaInfoId ) { |
78 | throw new InvalidArgumentException( |
79 | 'Expected MediaInfoId, got a ' . get_class( $id ) . |
80 | ' from deserializing ' . var_export( $serialization, true ) |
81 | ); |
82 | } |
83 | |
84 | return $id; |
85 | } |
86 | |
87 | return null; |
88 | } |
89 | |
90 | /** |
91 | * @param array $serialization |
92 | * |
93 | * @return TermList|null |
94 | */ |
95 | private function deserializeLabels( array $serialization ) { |
96 | if ( array_key_exists( 'labels', $serialization ) ) { |
97 | return $this->termListDeserializer->deserialize( $serialization['labels'] ); |
98 | } |
99 | |
100 | return null; |
101 | } |
102 | |
103 | /** |
104 | * @param array $serialization |
105 | * |
106 | * @return TermList|null |
107 | */ |
108 | private function deserializeDescriptions( array $serialization ) { |
109 | if ( array_key_exists( 'descriptions', $serialization ) ) { |
110 | return $this->termListDeserializer->deserialize( $serialization['descriptions'] ); |
111 | } |
112 | |
113 | return null; |
114 | } |
115 | |
116 | /** |
117 | * @param array $serialization |
118 | * |
119 | * @return StatementList|null |
120 | */ |
121 | private function deserializeStatements( array $serialization ) { |
122 | if ( array_key_exists( 'statements', $serialization ) ) { |
123 | return $this->statementListDeserializer->deserialize( $serialization['statements'] ); |
124 | } |
125 | |
126 | return null; |
127 | } |
128 | |
129 | } |