Completed
Push — master ( 8bcfe7...12792b )
by Rémi
03:26
created

TwitterJsonSerializer   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 100%

Importance

Changes 9
Bugs 2 Features 3
Metric Value
wmc 8
c 9
b 2
f 3
lcom 1
cbo 8
dl 0
loc 85
ccs 19
cts 19
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 18 1
A serialize() 0 10 3
A unserialize() 0 12 3
A build() 0 12 1
1
<?php
2
3
namespace Twitter\Serializer;
4
5
use Twitter\Serializer;
6
use Twitter\TwitterSerializable;
7
use Twitter\TwitterSerializer;
8
9
class TwitterJsonSerializer implements Serializer
10
{
11
    /**
12
     * @var TwitterSerializer[]
13
     */
14
    private $serializers;
15
16
    /**
17
     * Constructor
18
     *
19
     * @param TwitterEventTargetSerializer $twitterTargetSerializer
20
     * @param TwitterDirectMessageSerializer $directMessageSerializer
21
     * @param TwitterEventSerializer $twitterEventSerializer
22
     * @param TwitterFriendsSerializer $twitterFriendsSerializer
23
     * @param TwitterDisconnectSerializer $twitterDisconnectSerializer
24
     * @param TwitterDeleteSerializer $twitterDeleteSerializer
25
     * @param TwitterUserSerializer $twitterUserSerializer
26
     */
27
    public function __construct(
28
        TwitterEventTargetSerializer $twitterTargetSerializer,
29
        TwitterDirectMessageSerializer $directMessageSerializer,
30
        TwitterEventSerializer $twitterEventSerializer,
31
        TwitterFriendsSerializer $twitterFriendsSerializer,
32
        TwitterDisconnectSerializer $twitterDisconnectSerializer,
33
        TwitterDeleteSerializer $twitterDeleteSerializer,
34
        TwitterUserSerializer $twitterUserSerializer
35
    ) {
36
        $this->serializers = [];
37
        $this->serializers[] = $twitterTargetSerializer;
38
        $this->serializers[] = $directMessageSerializer;
39
        $this->serializers[] = $twitterEventSerializer;
40
        $this->serializers[] = $twitterFriendsSerializer;
41
        $this->serializers[] = $twitterDisconnectSerializer;
42
        $this->serializers[] = $twitterDeleteSerializer;
43
        $this->serializers[] = $twitterUserSerializer;
44
    }
45
46
    /**
47
     * @param  TwitterSerializable $object
48
     * @return string
49
     */
50
    public function serialize(TwitterSerializable $object)
51
    {
52
        foreach ($this->serializers as $serializer) {
53
            if ($serializer->canSerialize($object)) {
54
                return json_encode($serializer->serialize($object));
55
            }
56
        }
57
58
        throw new \BadMethodCallException('Not Implemented');
59 36
    }
60
61
    /**
62
     * @param  string $string
63
     * @return TwitterSerializable
64
     */
65
    public function unserialize($string)
66
    {
67
        $object = json_decode($string);
68 36
69 36
        foreach ($this->serializers as $serializer) {
70 36
            if ($serializer->canUnserialize($object)) {
71 36
                return $serializer->unserialize($object);
72 36
            }
73 36
        }
74 36
75 36
        throw new \BadMethodCallException('Not Implemented');
76
    }
77
78
    /**
79
     * @return TwitterJsonSerializer
80
     */
81 12
    public static function build()
82
    {
83 12
        return new self(
84 3
            TwitterEventTargetSerializer::build(),
85 8
            TwitterDirectMessageSerializer::build(),
86 3
            TwitterEventSerializer::build(),
87 6
            TwitterFriendsSerializer::build(),
88 3
            TwitterDisconnectSerializer::build(),
89 3
            TwitterDeleteSerializer::build(),
90 2
            TwitterUserSerializer::build()
91 3
        );
92
    }
93
}
94