Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
21 / 21 |
|
100.00% |
4 / 4 |
CRAP | |
100.00% |
1 / 1 |
MediaInfoSerializer | |
100.00% |
21 / 21 |
|
100.00% |
4 / 4 |
6 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
isSerializerFor | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
serialize | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
2 | |||
getSerialized | |
100.00% |
12 / 12 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace Wikibase\MediaInfo\DataModel\Serialization; |
4 | |
5 | use Serializers\DispatchableSerializer; |
6 | use Serializers\Exceptions\SerializationException; |
7 | use Serializers\Exceptions\UnsupportedObjectException; |
8 | use Serializers\Serializer; |
9 | use Wikibase\MediaInfo\DataModel\MediaInfo; |
10 | |
11 | /** |
12 | * @license GPL-2.0-or-later |
13 | * @author Bene* < benestar.wikimedia@gmail.com > |
14 | */ |
15 | class MediaInfoSerializer implements DispatchableSerializer { |
16 | |
17 | /** |
18 | * @var Serializer |
19 | */ |
20 | private $termListSerializer; |
21 | |
22 | /** |
23 | * @var Serializer |
24 | */ |
25 | private $statementListSerializer; |
26 | |
27 | /** |
28 | * @param Serializer $termListSerializer |
29 | * @param Serializer $statementListSerializer |
30 | */ |
31 | public function __construct( |
32 | Serializer $termListSerializer, |
33 | Serializer $statementListSerializer |
34 | ) { |
35 | $this->termListSerializer = $termListSerializer; |
36 | $this->statementListSerializer = $statementListSerializer; |
37 | } |
38 | |
39 | /** |
40 | * @see DispatchableSerializer::isSerializerFor |
41 | * |
42 | * @param mixed $object |
43 | * |
44 | * @return bool |
45 | */ |
46 | public function isSerializerFor( $object ) { |
47 | return $object instanceof MediaInfo; |
48 | } |
49 | |
50 | /** |
51 | * @see Serializer::serialize |
52 | * |
53 | * @param MediaInfo $object |
54 | * |
55 | * @throws SerializationException |
56 | * @return array |
57 | */ |
58 | public function serialize( $object ) { |
59 | if ( !$this->isSerializerFor( $object ) ) { |
60 | throw new UnsupportedObjectException( |
61 | $object, |
62 | 'MediaInfoSerializer can only serialize MediaInfo objects.' |
63 | ); |
64 | } |
65 | |
66 | return $this->getSerialized( $object ); |
67 | } |
68 | |
69 | private function getSerialized( MediaInfo $mediaInfo ) { |
70 | $serialization = [ 'type' => $mediaInfo->getType() ]; |
71 | |
72 | $id = $mediaInfo->getId(); |
73 | |
74 | if ( $id !== null ) { |
75 | $serialization['id'] = $id->getSerialization(); |
76 | } |
77 | |
78 | $serialization['labels'] = $this->termListSerializer->serialize( $mediaInfo->getLabels() ); |
79 | $serialization['descriptions'] = $this->termListSerializer->serialize( |
80 | $mediaInfo->getDescriptions() |
81 | ); |
82 | $serialization['statements'] = $this->statementListSerializer->serialize( |
83 | $mediaInfo->getStatements() |
84 | ); |
85 | |
86 | return $serialization; |
87 | } |
88 | |
89 | } |