TwitterDeleteSerializer   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 10
lcom 0
cbo 2
dl 0
loc 88
ccs 41
cts 41
cp 1
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
B serialize() 0 29 4
A unserialize() 0 20 3
A canSerialize() 0 4 1
A canUnserialize() 0 4 1
A build() 0 4 1
1
<?php
2
3
namespace Twitter\Serializer;
4
5
use Assert\Assertion;
6
use Twitter\Object\TwitterDelete;
7
use Twitter\TwitterSerializable;
8
use Twitter\TwitterSerializer;
9
10
class TwitterDeleteSerializer implements TwitterSerializer
11
{
12
    /**
13
     * @param  TwitterSerializable $object
14
     * @return \stdClass
15
     */
16 9
    public function serialize(TwitterSerializable $object)
17
    {
18
        /* @var TwitterDelete $object */
19 9
        Assertion::true($this->canSerialize($object), 'object must be an instance of TwitterDelete');
20
21 6
        $refObject = new \stdClass();
22 6
        $refObject->id = $object->getId();
23 6
        $refObject->user_id = $object->getUserId();
24
25 6
        $obj = new \stdClass();
26
27 6
        switch ($object->getType()) {
28 6
            case TwitterDelete::TWEET:
29 3
                $obj->status = $refObject;
30 3
                break;
31 3
            case TwitterDelete::DM:
32 3
                $obj->direct_message = $refObject;
33 3
                break;
34 4
        }
35
36 6
        if ($object->getDate()) {
37 6
            $obj->timestamp_ms = $object->getDate()->getTimestamp() * 1000;
38 4
        }
39
40 6
        $delete = new \stdClass();
41 6
        $delete->delete = $obj;
42
43 6
        return $delete;
44
    }
45
46
    /**
47
     * @param  \stdClass $obj
48
     * @param  array     $context
49
     * @return TwitterDelete
50
     */
51 9
    public function unserialize($obj, array $context = [])
52
    {
53 9
        Assertion::true($this->canUnserialize($obj), 'object is not unserializable');
54
55 6
        $d = $obj->delete;
56 6
        if (isset($d->status)) {
57 3
            $ref = $d->status;
58 3
            $type = TwitterDelete::TWEET;
59 2
        } else {
60 3
            $ref = $d->direct_message;
61 3
            $type = TwitterDelete::DM;
62
        }
63
64 6
        return TwitterDelete::create(
65 6
            $type,
66 6
            $ref->id,
67 6
            $ref->user_id,
68 6
            (new \DateTimeImmutable())->setTimestamp((int) floor($d->timestamp_ms / 1000))?:new \DateTimeImmutable()
69 4
        );
70
    }
71
72
    /**
73
     * @param  TwitterSerializable $object
74
     * @return boolean
75
     */
76 9
    public function canSerialize(TwitterSerializable $object)
77
    {
78 9
        return $object instanceof TwitterDelete;
79
    }
80
81
    /**
82
     * @param  \stdClass $object
83
     * @return boolean
84
     */
85 9
    public function canUnserialize($object)
86
    {
87 9
        return isset($object->delete);
88
    }
89
90
    /**
91
     * @return TwitterDeleteSerializer
92
     */
93 6
    public static function build()
94
    {
95 6
        return new self();
96
    }
97
}
98