ClaimCheckSerializerChain   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 9
c 1
b 0
f 1
lcom 1
cbo 2
dl 0
loc 68
rs 10
ccs 24
cts 24
cp 1

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A serialize() 0 12 3
A unserialize() 0 12 3
A setSerializers() 0 6 1
A addSerializer() 0 4 1
1
<?php
2
3
namespace Abacaphiliac\AwsSdk\ClaimCheck\Serializer;
4
5
use Abacaphiliac\AwsSdk\ClaimCheck\ClaimCheck;
6
use Abacaphiliac\AwsSdk\ClaimCheck\Exception\ExceptionInterface;
7
use Abacaphiliac\AwsSdk\ClaimCheck\Exception\InvalidArgumentException;
8
9
class ClaimCheckSerializerChain implements ClaimCheckSerializerInterface
10
{
11
    /** @var  ClaimCheckSerializerInterface[] */
12
    private $serializers;
13
14
    /**
15
     * SerializerChain constructor.
16
     * @param ClaimCheckSerializerInterface[] $serializers
17
     */
18 25
    public function __construct(array $serializers = [])
19
    {
20 25
        $this->setSerializers($serializers);
21 25
    }
22
23
    /**
24
     * @param ClaimCheck $claimCheck
25
     * @return string
26
     * @throws ExceptionInterface
27
     */
28 5
    public function serialize(ClaimCheck $claimCheck)
29
    {
30 5
        foreach ($this->serializers as $serializer) {
31
            try {
32 5
                return $serializer->serialize($claimCheck);
33 2
            } catch (ExceptionInterface $e) {
34 2
                continue;
35
            }
36 1
        }
37
        
38 1
        throw new InvalidArgumentException('Failed to serialize Claim Check.');
39
    }
40
41
    /**
42
     * @param string $encodedValue
43
     * @return ClaimCheck
44
     * @throws ExceptionInterface
45
     */
46 6
    public function unserialize($encodedValue)
47
    {
48 6
        foreach ($this->serializers as $serializer) {
49
            try {
50 6
                return $serializer->unserialize($encodedValue);
51 3
            } catch (ExceptionInterface $e) {
52 3
                continue;
53
            }
54 2
        }
55
56 2
        throw new InvalidArgumentException('Failed to hydrate Claim Check from message: ' . $encodedValue);
57
    }
58
59
    /**
60
     * @param ClaimCheckSerializerInterface[] $serializers
61
     */
62 25
    private function setSerializers(array $serializers)
63
    {
64 25
        $this->serializers = array();
65
        
66 25
        array_map(array($this, 'addSerializer'), $serializers);
67 25
    }
68
69
    /**
70
     * @param ClaimCheckSerializerInterface $serializer
71
     */
72 25
    private function addSerializer(ClaimCheckSerializerInterface $serializer)
73
    {
74 25
        $this->serializers[] = $serializer;
75 25
    }
76
}
77