Completed
Push — master ( 40ecd1...8d3779 )
by Rémi
05:14
created

TwitterMediaSerializer::serialize()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 24
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 3

Importance

Changes 3
Bugs 1 Features 1
Metric Value
c 3
b 1
f 1
dl 0
loc 24
ccs 17
cts 17
cp 1
rs 8.9713
cc 3
eloc 16
nc 3
nop 1
crap 3
1
<?php
2
3
namespace Twitter\Serializer;
4
5
use Twitter\Object\TwitterMedia;
6
use Twitter\TwitterSerializable;
7
use Twitter\TwitterSerializer;
8
9
class TwitterMediaSerializer implements TwitterSerializer
10
{
11
    /**
12
     * @var TwitterEntityIndicesSerializer
13
     */
14
    private $entityIndicesSerializer;
15
16
    /**
17
     * @var TwitterMediaSizeSerializer
18
     */
19
    private $mediaSizeSerializer;
20
21
    /**
22
     * Constructor
23
     *
24
     * @param TwitterEntityIndicesSerializer $entityIndicesSerializer
25
     * @param TwitterMediaSizeSerializer     $mediaSizeSerializer
26
     */
27 33
    public function __construct(
28
        TwitterEntityIndicesSerializer $entityIndicesSerializer,
29
        TwitterMediaSizeSerializer $mediaSizeSerializer
30
    ) {
31 33
        $this->entityIndicesSerializer  = $entityIndicesSerializer;
32 33
        $this->mediaSizeSerializer = $mediaSizeSerializer;
33 33
    }
34
35
    /**
36
     * @param  TwitterSerializable $object
37
     * @return \stdClass
38
     */
39 6
    public function serialize(TwitterSerializable $object)
40
    {
41 6
        if (!$this->canSerialize($object)) {
42 3
            throw new \InvalidArgumentException('$object must be an instance of TwitterMedia');
43
        }
44
45
        /* @var TwitterMedia $object */
46 3
        $media = new \stdClass();
47 3
        $media->id = $object->getId();
48 3
        $media->media_url = $object->getMediaUrl();
49 3
        $media->media_url_https = $object->getMediaUrlHttps();
50 3
        $media->url = $object->getUrl();
51 3
        $media->display_url = $object->getDisplayUrl();
52 3
        $media->expanded_url = $object->getExpandedUrl();
53 3
        $media->type = $object->getType();
54 3
        $media->indices = $this->entityIndicesSerializer->serialize($object->getIndices());
55
56 3
        $media->sizes = [];
57 3
        foreach ($object->getSizes() as $size) {
58 3
            $media->sizes[$size->getName()] = $this->mediaSizeSerializer->serialize($size);
59 2
        }
60
61 3
        return $media;
62
    }
63
64
    /**
65
     * @param  \stdClass $obj
66
     * @param  array     $context
67
     * @return TwitterMedia
68
     */
69 6
    public function unserialize($obj, array $context = [])
70
    {
71 6
        if (!$this->canUnserialize($obj)) {
72 3
            throw new \InvalidArgumentException('$object is not unserializable');
73
        }
74
75 3
        $sizesObjects = [];
76 3
        if ($obj->sizes) {
77 3
            foreach ($obj->sizes as $sizeName => $sizeObj) {
78 3
                $sizesObjects[$sizeName] = $this->mediaSizeSerializer->unserialize(
79 2
                    $sizeObj,
80 3
                    [TwitterMediaSizeSerializer::NAME_VAR => $sizeName]
81 2
                );
82 2
            }
83 2
        }
84
85 3
        return TwitterMedia::create(
86 3
            $obj->id,
87 3
            $obj->media_url,
88 3
            $obj->media_url_https,
89 3
            $obj->url,
90 3
            $obj->display_url,
91 3
            $obj->expanded_url,
92 2
            $sizesObjects,
93 3
            $obj->type,
94 3
            $this->entityIndicesSerializer->unserialize($obj->indices)
95 2
        );
96
    }
97
98
    /**
99
     * @param  TwitterSerializable $object
100
     * @return boolean
101
     */
102 6
    public function canSerialize(TwitterSerializable $object)
103
    {
104 6
        return $object instanceof TwitterMedia;
105
    }
106
107
    /**
108
     * @param  \stdClass $object
109
     * @return boolean
110
     */
111 6
    public function canUnserialize($object)
112
    {
113 6
        return isset($object->media_url) && !isset($object->duration_millis);
114
    }
115
116
    /**
117
     * @return TwitterMediaSerializer
118
     */
119 21
    public static function build()
120
    {
121 21
        return new self(
122 21
            TwitterEntityIndicesSerializer::build(),
123 21
            TwitterMediaSizeSerializer::build()
124 14
        );
125
    }
126
}
127