TwitterEntitiesSerializer::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 15
ccs 8
cts 8
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 13
nc 1
nop 6
crap 1
1
<?php
2
3
namespace Twitter\Serializer;
4
5
use Assert\Assertion;
6
use Twitter\Object\TwitterEntities;
7
use Twitter\TwitterSerializable;
8
use Twitter\TwitterSerializer;
9
10
class TwitterEntitiesSerializer implements TwitterSerializer
11
{
12
    /**
13
     * @var TwitterHashtagSerializer
14
     */
15
    private $hashtagSerializer;
16
17
    /**
18
     * @var TwitterSymbolSerializer
19
     */
20
    private $symbolSerializer;
21
22
    /**
23
     * @var TwitterUrlSerializer
24
     */
25
    private $urlSerializer;
26
27
    /**
28
     * @var TwitterUserMentionSerializer
29
     */
30
    private $userMentionSerializer;
31
32
    /**
33
     * @var TwitterMediaSerializer
34
     */
35
    private $mediaSerializer;
36
37
    /**
38
     * @var TwitterExtendedEntitySerializer
39
     */
40
    private $extendedEntitySerializer;
41
42
    /**
43
     * @param TwitterExtendedEntitySerializer $extendedEntitySerializer
44
     * @param TwitterHashtagSerializer $hashtagSerializer
45
     * @param TwitterMediaSerializer $mediaSerializer
46
     * @param TwitterSymbolSerializer $symbolSerializer
47
     * @param TwitterUrlSerializer $urlSerializer
48
     * @param TwitterUserMentionSerializer $userMentionSerializer
49
     */
50 30
    public function __construct(
51
        TwitterExtendedEntitySerializer $extendedEntitySerializer,
52
        TwitterHashtagSerializer $hashtagSerializer,
53
        TwitterMediaSerializer $mediaSerializer,
54
        TwitterSymbolSerializer $symbolSerializer,
55
        TwitterUrlSerializer $urlSerializer,
56
        TwitterUserMentionSerializer $userMentionSerializer
57
    ) {
58 30
        $this->extendedEntitySerializer = $extendedEntitySerializer;
59 30
        $this->hashtagSerializer = $hashtagSerializer;
60 30
        $this->mediaSerializer = $mediaSerializer;
61 30
        $this->symbolSerializer = $symbolSerializer;
62 30
        $this->urlSerializer = $urlSerializer;
63 30
        $this->userMentionSerializer = $userMentionSerializer;
64 30
    }
65
66
    /**
67
     * @param  TwitterSerializable $object
68
     * @return \stdClass
69
     */
70 6
    public function serialize(TwitterSerializable $object)
71
    {
72
        /* @var TwitterEntities $object */
73 6
        Assertion::true($this->canSerialize($object), 'object must be an instance of TwitterEntities');
74
75 3
        $entities = new \stdClass();
76
77
        // Hashtags
78 3
        if ($object->getHashtags()) {
79 3
            $entities->hashtags = [];
80 3
            foreach ($object->getHashtags() as $hashtag) {
81 3
                $entities->hashtags[] = $this->hashtagSerializer->serialize($hashtag);
82 2
            }
83 2
        }
84
85
        // Symbols
86 3
        if ($object->getSymbols()) {
87 3
            $entities->symbols = [];
88 3
            foreach ($object->getSymbols() as $symbol) {
89 3
                $entities->symbols[] = $this->symbolSerializer->serialize($symbol);
90 2
            }
91 2
        }
92
93
        // Urls
94 3
        if ($object->getUrls()) {
95 3
            $entities->urls = [];
96 3
            foreach ($object->getUrls() as $url) {
97 3
                $entities->urls[] = $this->urlSerializer->serialize($url);
98 2
            }
99 2
        }
100
101
        // User mentions
102 3
        if ($object->getUserMentions()) {
103 3
            $entities->user_mentions = [];
104 3
            foreach ($object->getUserMentions() as $userMention) {
105 3
                $entities->user_mentions[] = $this->userMentionSerializer->serialize($userMention);
106 2
            }
107 2
        }
108
109
        // Media
110 3
        if ($object->getMedia()) {
111 3
            $entities->media = [];
112 3
            foreach ($object->getMedia() as $media) {
113 3
                $entities->media[] = $this->mediaSerializer->serialize($media);
114 2
            }
115 2
        }
116
117
        // Extended entities
118 3
        if ($object->getExtendedEntities()) {
119 3
            $entities->extended_entities = [];
120 3
            foreach ($object->getExtendedEntities() as $extendedEntity) {
121 3
                $entities->extended_entities[] = $this->extendedEntitySerializer->serialize($extendedEntity);
122 2
            }
123 2
        }
124
125 3
        return $entities;
126
    }
127
128
    /**
129
     * @param  \stdClass $obj
130
     * @param  array     $context
131
     * @return TwitterEntities
132
     */
133 6
    public function unserialize($obj, array $context = [])
134
    {
135 6
        Assertion::true($this->canUnserialize($obj), 'object is not unserializable');
136
137
        // Hashtags
138 3
        $hashtags = [];
139 3
        if (isset($obj->hashtags)) {
140 3
            foreach ($obj->hashtags as $hashtag) {
141 3
                $hashtags[] = $this->hashtagSerializer->unserialize($hashtag);
142 2
            }
143 2
        }
144
145
        // Symbols
146 5
        $symbols = [];
147 3
        if (isset($obj->symbols)) {
148 3
            foreach ($obj->symbols as $symbol) {
149 3
                $symbols[] = $this->symbolSerializer->unserialize($symbol);
150 2
            }
151 2
        }
152
153
        // URLs
154 3
        $urls = [];
155 3
        if (isset($obj->urls)) {
156 3
            foreach ($obj->urls as $url) {
157 3
                $urls[] = $this->urlSerializer->unserialize($url);
158 2
            }
159 2
        }
160
161
        // User mentions
162 3
        $userMentions = [];
163 3
        if (isset($obj->user_mentions)) {
164 3
            foreach ($obj->user_mentions as $userMention) {
165 3
                $userMentions[] = $this->userMentionSerializer->unserialize($userMention);
166 2
            }
167 2
        }
168
169
        // Media
170 3
        $media = [];
171 3
        if (isset($obj->media)) {
172 3
            foreach ($obj->media as $medium) {
173 3
                $media[] = $this->mediaSerializer->unserialize($medium);
174 2
            }
175 2
        }
176
177
        // Extended entities
178 3
        $extendedEntities = [];
179 3
        if (isset($obj->extended_entities)) {
180 3
            foreach ($obj->extended_entities as $extendedEntity) {
181 3
                $extendedEntities[] = $this->extendedEntitySerializer->unserialize($extendedEntity);
182 2
            }
183 2
        }
184
185 3
        return TwitterEntities::create($hashtags, $userMentions, $urls, $media, $symbols, $extendedEntities);
186
    }
187
188
    /**
189
     * @param  TwitterSerializable $object
190
     * @return boolean
191
     */
192 6
    public function canSerialize(TwitterSerializable $object)
193
    {
194 6
        return $object instanceof TwitterEntities;
195
    }
196
197
    /**
198
     * @param  \stdClass $object
199
     * @return boolean
200
     */
201 6
    public function canUnserialize($object)
202
    {
203 6
        return isset($object->hashtags) ||  isset($object->symbols) ||  isset($object->urls) ||
204 6
            isset($object->user_mentions) || isset($object->media) || isset($object->extended_entities);
205
    }
206
207
    /**
208
     * @return TwitterEntitiesSerializer
209
     */
210 18
    public static function build()
211
    {
212 18
        return new self(
213 18
            TwitterExtendedEntitySerializer::build(),
214 18
            TwitterHashtagSerializer::build(),
215 18
            TwitterMediaSerializer::build(),
216 18
            TwitterSymbolSerializer::build(),
217 18
            TwitterUrlSerializer::build(),
218 18
            TwitterUserMentionSerializer::build()
219 12
        );
220
    }
221
}
222