Completed
Push — master ( 5c38af...d37987 )
by Markus
48s queued 15s
created

PropertyNameConverterStrategyProvider   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
eloc 13
c 1
b 0
f 0
dl 0
loc 69
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A hasStrategy() 0 3 1
A getAllStrategies() 0 3 1
A getStrategy() 0 7 2
A addStrategy() 0 7 1
A removeStrategy() 0 10 2
1
<?php
2
3
namespace Jellyfish\Serializer\NameConverter;
4
5
class PropertyNameConverterStrategyProvider implements PropertyNameConverterStrategyProviderInterface
6
{
7
    /**
8
     * @var \Jellyfish\Serializer\NameConverter\PropertyNameConverterStrategyInterface[]
9
     */
10
    protected $propertyNameConverterStrategyList = [];
11
12
    /**
13
     * @param string $propertyNameConverterStrategyKey
14
     * @param \Jellyfish\Serializer\NameConverter\PropertyNameConverterStrategyInterface $propertyNameConverterStrategy
15
     *
16
     * @return \Jellyfish\Serializer\NameConverter\PropertyNameConverterStrategyProviderInterface
17
     */
18
    public function addStrategy(
19
        string $propertyNameConverterStrategyKey,
20
        PropertyNameConverterStrategyInterface $propertyNameConverterStrategy
21
    ): PropertyNameConverterStrategyProviderInterface {
22
        $this->propertyNameConverterStrategyList[$propertyNameConverterStrategyKey] = $propertyNameConverterStrategy;
23
24
        return $this;
25
    }
26
27
    /**
28
     * @param string $propertyNameConverterStrategyKey
29
     *
30
     * @return \Jellyfish\Serializer\NameConverter\PropertyNameConverterStrategyProviderInterface
31
     */
32
    public function removeStrategy(
33
        string $propertyNameConverterStrategyKey
34
    ): PropertyNameConverterStrategyProviderInterface {
35
        if (!$this->hasStrategy($propertyNameConverterStrategyKey)) {
36
            return $this;
37
        }
38
39
        unset($this->propertyNameConverterStrategyList[$propertyNameConverterStrategyKey]);
40
41
        return $this;
42
    }
43
44
    /**
45
     * @return \Jellyfish\Serializer\NameConverter\PropertyNameConverterStrategyInterface[]
46
     */
47
    public function getAllStrategies(): array
48
    {
49
        return $this->propertyNameConverterStrategyList;
50
    }
51
52
    /**
53
     * @param string $propertyNameConverterStrategyKey
54
     *
55
     * @return bool
56
     */
57
    public function hasStrategy(string $propertyNameConverterStrategyKey): bool
58
    {
59
        return array_key_exists($propertyNameConverterStrategyKey, $this->propertyNameConverterStrategyList);
60
    }
61
62
    /**
63
     * @param string $propertyNameConverterStrategyKey
64
     *
65
     * @return \Jellyfish\Serializer\NameConverter\PropertyNameConverterStrategyInterface|null
66
     */
67
    public function getStrategy(string $propertyNameConverterStrategyKey): ?PropertyNameConverterStrategyInterface
68
    {
69
        if (!$this->hasStrategy($propertyNameConverterStrategyKey)) {
70
            return null;
71
        }
72
73
        return $this->propertyNameConverterStrategyList[$propertyNameConverterStrategyKey];
74
    }
75
}
76