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

TwitterEventSerializer::serialize()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 21
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 21
ccs 13
cts 13
cp 1
rs 9.3142
c 0
b 0
f 0
cc 3
eloc 12
nc 4
nop 1
crap 3
1
<?php
2
3
namespace Twitter\Serializer;
4
5
use Assert\Assertion;
6
use Twitter\Object\TwitterDate;
7
use Twitter\Object\TwitterEvent;
8
use Twitter\TwitterSerializable;
9
use Twitter\TwitterSerializer;
10
11
class TwitterEventSerializer implements TwitterSerializer
12
{
13
    /**
14
     * @var TwitterUserSerializer
15
     */
16
    private $userSerializer;
17
18
    /**
19
     * @var TwitterEventTargetSerializer
20
     */
21
    private $targetSerializer;
22
23
    /**
24
     * @param TwitterUserSerializer $userSerializer
25
     * @param TwitterEventTargetSerializer $targetSerializer
26 18
     */
27
    public function __construct(TwitterUserSerializer $userSerializer, TwitterEventTargetSerializer $targetSerializer)
28 18
    {
29 18
        $this->userSerializer = $userSerializer;
30 18
        $this->targetSerializer = $targetSerializer;
31
    }
32
33
    /**
34
     * @param  TwitterSerializable $object
35
     * @return \stdClass
36 6
     */
37
    public function serialize(TwitterSerializable $object)
38 6
    {
39 3
        /* @var TwitterEvent $object */
40
        Assertion::true($this->canSerialize($object), 'object must be an instance of TwitterEvent');
41
        Assertion::eq(new \DateTimeZone('UTC'), $object->getDate()->getTimezone());
42
43 3
        $event = new \stdClass();
44 3
        $event->event = $object->getType();
45 3
        $event->source = $this->userSerializer->serialize($object->getSource());
46 3
        $event->created_at = $object->getDate()->format(TwitterDate::FORMAT);
47
48 3
        if ($object->getTarget()) {
49 3
            $event->target = $this->userSerializer->serialize($object->getTarget());
50 2
        }
51
52 3
        if ($object->getObject()) {
53 3
            $event->target_object = $this->targetSerializer->serialize($object->getObject());
54 2
        }
55
56 3
        return $event;
57
    }
58
59
    /**
60
     * @param  \stdClass $obj
61
     * @param  array     $context
62
     * @return TwitterEvent
63
     */
64 6
    public function unserialize($obj, array $context = [])
65
    {
66 6
        Assertion::true($this->canUnserialize($obj), 'object is not unserializable');
67 3
68
        $createdAt = new \DateTimeImmutable($obj->created_at);
69
        Assertion::eq(new \DateTimeZone('UTC'), $createdAt->getTimezone());
70 3
71 3
        return TwitterEvent::create(
72 3
            $obj->event,
73 3
            $this->userSerializer->unserialize($obj->source),
74 3
            isset($obj->target) ? $this->userSerializer->unserialize($obj->target) : null,
75 3
            isset($obj->target_object) ? $this->targetSerializer->unserialize($obj->target_object) : null,
76 2
            $createdAt
77
        );
78
    }
79
80
    /**
81
     * @param  TwitterSerializable $object
82
     * @return boolean
83 6
     */
84
    public function canSerialize(TwitterSerializable $object)
85 6
    {
86
        return $object instanceof TwitterEvent;
87
    }
88
89
    /**
90
     * @param  \stdClass $object
91
     * @return boolean
92 6
     */
93
    public function canUnserialize($object)
94 6
    {
95
        return isset($object->event);
96
    }
97
98
    /**
99
     * @return TwitterEventSerializer
100 6
     */
101
    public static function build()
102 6
    {
103 6
        return new self(
104 6
            TwitterUserSerializer::build(),
105 4
            TwitterEventTargetSerializer::build()
106
        );
107
    }
108
}
109