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

TwitterDeleteSerializer::canSerialize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

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