Completed
Push — master ( f862bf...679874 )
by Rémi
03:09
created

TwitterMediaSerializer::serialize()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 2

Importance

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