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

TwitterJsonSerializer::unserialize()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 3

Importance

Changes 5
Bugs 0 Features 2
Metric Value
c 5
b 0
f 2
dl 0
loc 12
ccs 8
cts 8
cp 1
rs 9.4285
cc 3
eloc 6
nc 3
nop 1
crap 3
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