Passed
Pull Request — master (#15)
by Enjoys
02:34
created

RenderFactory::getRender()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 18
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3.243

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 3
eloc 7
c 3
b 0
f 0
nc 3
nop 3
dl 0
loc 18
ccs 7
cts 10
cp 0.7
crap 3.243
rs 10
1
<?php
2
3
namespace Enjoys\AssetsCollector\Render;
4
5
use Enjoys\AssetsCollector\Assets;
6
use Enjoys\AssetsCollector\Environment;
7
use Enjoys\AssetsCollector\Exception\UnexpectedParameters;
8
use Enjoys\AssetsCollector\Render\Html\Css;
9
use Enjoys\AssetsCollector\Render\Html\Js;
10
11
class RenderFactory
12
{
13
    private const RENDERS = [
14
        Assets::RENDER_HTML => [
15
            'css' => Css::class,
16
            'js' => Js::class
17
        ]
18
    ];
19
20
    /**
21
     * @param string $type
22
     * @param Environment $environment
23
     * @param string $render
24
     * @return RenderInterface
25
     * @throws \Exception
26
     */
27 15
    public static function getRender(
28
        string $type,
29
        Environment $environment,
30
        string $render = Assets::RENDER_HTML
31
    ): RenderInterface {
32 15
        if (!array_key_exists($render, self::RENDERS)) {
33 1
            throw new UnexpectedParameters(
34 1
                sprintf('Invalid render group. Allowed only: %s', implode(', ', array_keys(self::RENDERS)))
35 1
            );
36
        }
37
38 14
        if (null === $renderClass = (self::RENDERS[$render][$type] ?? null)) {
39
            throw new UnexpectedParameters(
40
                sprintf('Invalid render. Allowed only: %s', implode(', ', array_keys(self::RENDERS[$render])))
41
            );
42
        }
43
44 14
        return new $renderClass($environment);
45
    }
46
}
47