Completed
Push — master ( 868808...ccab58 )
by Rémi
02:55
created

TwitterJsonSerializer::serialize()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 15
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 4

Importance

Changes 6
Bugs 2 Features 2
Metric Value
c 6
b 2
f 2
dl 0
loc 15
ccs 11
cts 11
cp 1
rs 9.2
cc 4
eloc 11
nc 4
nop 1
crap 4
1
<?php
2
3
namespace Twitter\Serializer;
4
5
use Twitter\Object\Tweet;
6
use Twitter\Object\TwitterDirectMessage;
7
use Twitter\Object\TwitterUser;
8
use Twitter\Serializer;
9
use Twitter\TwitterSerializable;
10
11
class TwitterJsonSerializer implements Serializer
12
{
13
    /**
14
     * @var TwitterEventTargetSerializer
15
     */
16
    private $twitterTargetSerializer;
17
18
    /**
19
     * @var TwitterDirectMessageSerializer
20
     */
21
    private $directMessageSerializer;
22
23
    /**
24
     * @var TwitterEventSerializer
25
     */
26
    private $twitterEventSerializer;
27
28
    /**
29
     * @var TwitterFriendsSerializer
30
     */
31
    private $twitterFriendsSerializer;
32
33
    /**
34
     * @var TwitterDisconnectSerializer
35
     */
36
    private $twitterDisconnectSerializer;
37
38
    /**
39
     * @var TwitterDeleteSerializer
40
     */
41
    private $twitterDeleteSerializer;
42
43
    /**
44
     * @var TwitterUserSerializer
45
     */
46
    private $twitterUserSerializer;
47
48
    /**
49
     * Constructor
50
     *
51
     * @param TwitterEventTargetSerializer $twitterTargetSerializer
52
     * @param TwitterDirectMessageSerializer $directMessageSerializer
53
     * @param TwitterEventSerializer $twitterEventSerializer
54
     * @param TwitterFriendsSerializer $twitterFriendsSerializer
55
     * @param TwitterDisconnectSerializer $twitterDisconnectSerializer
56
     * @param TwitterDeleteSerializer $twitterDeleteSerializer
57
     * @param TwitterUserSerializer $twitterUserSerializer
58
     */
59 36
    public function __construct(
60
        TwitterEventTargetSerializer $twitterTargetSerializer,
61
        TwitterDirectMessageSerializer $directMessageSerializer,
62
        TwitterEventSerializer $twitterEventSerializer,
63
        TwitterFriendsSerializer $twitterFriendsSerializer,
64
        TwitterDisconnectSerializer $twitterDisconnectSerializer,
65
        TwitterDeleteSerializer $twitterDeleteSerializer,
66
        TwitterUserSerializer $twitterUserSerializer
67
    ) {
68 36
        $this->twitterTargetSerializer = $twitterTargetSerializer;
69 36
        $this->directMessageSerializer = $directMessageSerializer;
70 36
        $this->twitterEventSerializer = $twitterEventSerializer;
71 36
        $this->twitterFriendsSerializer = $twitterFriendsSerializer;
72 36
        $this->twitterDisconnectSerializer = $twitterDisconnectSerializer;
73 36
        $this->twitterDeleteSerializer = $twitterDeleteSerializer;
74 36
        $this->twitterUserSerializer = $twitterUserSerializer;
75 36
    }
76
77
    /**
78
     * @param  TwitterSerializable $object
79
     * @return string
80
     */
81 12
    public function serialize(TwitterSerializable $object)
82
    {
83 12
        if ($object instanceof TwitterUser) {
84 3
            $serializedObject = $this->twitterUserSerializer->serialize($object);
85 8
        } elseif ($object instanceof Tweet) { // or list
86 3
            $serializedObject =  $this->twitterTargetSerializer->serialize($object);
87 6
        } elseif ($object instanceof TwitterDirectMessage) {
88 3
            $serializedObject = new \stdClass();
89 3
            $serializedObject->direct_message = $this->directMessageSerializer->serialize($object);
90 2
        } else {
91 3
            throw new \BadMethodCallException('Not Implemented');
92
        }
93
94 9
        return json_encode($serializedObject);
95
    }
96
97
    /**
98
     * @param  string $string
99
     * @return TwitterSerializable
100
     */
101 21
    public function unserialize($string)
102
    {
103 21
        $obj = json_decode($string);
104
105 21
        $object = null;
106
107 21
        if (isset($obj->text) && isset($obj->user)) {
108 3
            $object = $this->twitterTargetSerializer->unserialize($obj);
109 14
        } elseif (isset($obj->direct_message)) {
110 3
            $object = $this->directMessageSerializer->unserialize($obj->direct_message);
111 12
        } elseif (isset($obj->event)) {
112 3
            $object = $this->twitterEventSerializer->unserialize($obj);
113 10
        } elseif (isset($obj->friends)) {
114 3
            $object = $this->twitterFriendsSerializer->unserialize($obj);
115 8
        } elseif (isset($obj->disconnect)) {
116 3
            $object = $this->twitterDisconnectSerializer->unserialize($obj);
117 6
        } elseif (isset($obj->delete)) {
118 3
            $object = $this->twitterDeleteSerializer->unserialize($obj);
119 4
        } elseif (isset($obj->screen_name)) {
120 3
            $object = $this->twitterUserSerializer->unserialize($obj);
121 2
        }
122
123 21
        return $object;
124
    }
125
126
    /**
127
     * @return TwitterJsonSerializer
128
     */
129 3
    public static function build()
130
    {
131 3
        return new self(
132 3
            TwitterEventTargetSerializer::build(),
133 3
            TwitterDirectMessageSerializer::build(),
134 3
            TwitterEventSerializer::build(),
135 3
            TwitterFriendsSerializer::build(),
136 3
            TwitterDisconnectSerializer::build(),
137 3
            TwitterDeleteSerializer::build(),
138 3
            TwitterUserSerializer::build()
139 2
        );
140
    }
141
}
142