Completed
Push — master ( c5de01...c9c19d )
by
unknown
07:34 queued 05:10
created

Element::createArrayConfigResolver()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 0
1
<?php
2
3
namespace Coduo\TuTu\Config;
4
5
use Coduo\TuTu\Config\Element\Request;
6
use Coduo\TuTu\Config\Element\Response;
7
use Symfony\Component\OptionsResolver\OptionsResolver;
8
9
final class Element
10
{
11
    /**
12
     * @var Element\Request
13
     */
14
    private $request;
15
16
    /**
17
     * @var Element\Response
18
     */
19
    private $response;
20
21
    /**
22
     * @param Request $request
23
     * @param Response $response
24
     */
25
    public function __construct(Request $request, Response $response)
26
    {
27
        $this->request = $request;
28
        $this->response = $response;
29
    }
30
31
    /**
32
     * @param array $arrayConfig
33
     * @return Element
34
     */
35
    public static function fromArray(array $arrayConfig)
36
    {
37
        $configResolver = self::createArrayConfigResolver();
38
        $config = $configResolver->resolve($arrayConfig);
39
        $responseConfig = new Element(
40
            Request::fromArray($config['request']),
41
            Response::fromArray($config['response'])
42
        );
43
44
        return $responseConfig;
45
    }
46
47
    /**
48
     * @return \Coduo\TuTu\Config\Element\Response
49
     */
50
    public function getResponse()
51
    {
52
        return $this->response;
53
    }
54
55
    /**
56
     * @param Response $response
57
     */
58
    public function changeResponse(Response $response)
59
    {
60
        $this->response = $response;
61
    }
62
63
    /**
64
     * @return \Coduo\TuTu\Config\Element\Request
65
     */
66
    public function getRequest()
67
    {
68
        return $this->request;
69
    }
70
71
    /**
72
     * @return OptionsResolver
73
     */
74
    private static function createArrayConfigResolver()
75
    {
76
        $configResolver = new OptionsResolver();
77
        $configResolver->setRequired(['request']);
78
        $configResolver->setDefaults(['response' => []]);
79
        $configResolver->setAllowedTypes('request', 'array');
80
        $configResolver->setAllowedTypes('response', 'array');
81
82
        return $configResolver;
83
    }
84
}
85