Passed
Push — master ( fe8874...312ccc )
by Paul
02:35
created

ResponseTransform   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Test Coverage

Coverage 92.31%

Importance

Changes 0
Metric Value
dl 0
loc 47
ccs 12
cts 13
cp 0.9231
rs 10
c 0
b 0
f 0
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A applyResponseTransformer() 0 9 4
A __construct() 0 3 1
A transform() 0 4 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace CCT\Component\Rest\Http\Transform;
6
7
use CCT\Component\Rest\Http\ResponseInterface;
8
use CCT\Component\Rest\Transformer\Response\ResponseTransformerInterface;
9
10
class ResponseTransform implements ResponseTransformInterface
11
{
12
    /**
13
     * @var array
14
     */
15
    protected $transformers;
16
17
    /**
18
     * ResponseTransformer constructor.
19
     *
20
     * @param array $transformers
21
     */
22 3
    public function __construct(array $transformers = [])
23
    {
24 3
        $this->transformers = $transformers;
25 3
    }
26
27
    /**
28
     * It is possible to handle the Response data defining the Config key response_transformers
29
     * with an instance of Closure or an instance of TransformerInterface.
30
     *
31
     * @param ResponseInterface $data
32
     *
33
     * @return void
34
     */
35 2
    public function transform(ResponseInterface $data)
36
    {
37 2
        foreach ($this->transformers as $transformer) {
38 2
            $this->applyResponseTransformer($transformer, $data);
39
        }
40 2
    }
41
42
    /**
43
     * Applied single response transformer
44
     *
45
     * @param ResponseTransformerInterface|\Closure $transformer
46
     * @param ResponseInterface $data
47
     */
48 2
    protected function applyResponseTransformer($transformer, ResponseInterface $data)
49
    {
50 2
        if ($transformer instanceof ResponseTransformerInterface && $transformer->supports($data)) {
51 2
            $transformer->transform($data);
52 2
            return;
53
        }
54
55 2
        if ($transformer instanceof \Closure) {
56
            $transformer($data);
57
        }
58 2
    }
59
}
60