TemplateRenderer   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Test Coverage

Coverage 69.69%

Importance

Changes 0
Metric Value
wmc 11
eloc 30
c 0
b 0
f 0
dl 0
loc 76
ccs 23
cts 33
cp 0.6969
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getRenderer() 0 3 1
A addPath() 0 5 1
A getUsername() 0 17 4
A render() 0 18 3
A __construct() 0 8 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Fabiang\ExceptionGenerator\Generator;
6
7
use DateTime;
8
use Exception;
9
use Laminas\View\Model\ViewModel;
10
use Laminas\View\Renderer\PhpRenderer;
11
use Laminas\View\Resolver\TemplateMapResolver;
12
13
use function defined;
14
use function getenv;
15
use function rtrim;
16
use function str_replace;
17
18
class TemplateRenderer
19
{
20
    protected PhpRenderer $renderer;
21
22 3
    public function __construct(?PhpRenderer $renderer = null)
23
    {
24 3
        if (null === $renderer) {
25 3
            $renderer = new PhpRenderer();
26
        }
27
28 3
        $this->renderer = $renderer;
29 3
        $this->renderer->setResolver(new TemplateMapResolver());
30
    }
31
32
    /**
33
     * Add a path to template resolver.
34
     *
35
     * @param string $type     Template type
36
     * @param string $template Template path
37
     */
38 1
    public function addPath(string $type, string $template): void
39
    {
40
        /** @var TemplateMapResolver $resolver */
41 1
        $resolver = $this->renderer->resolver();
42 1
        $resolver->add($type, $template);
43
    }
44
45
    /**
46
     * Render an exception template
47
     *
48
     * @param string $namespace     Namespace of class
49
     * @param string $use Path for BaseExceptions to use, if they exists
50
     * @param string $exceptionName Type of exception (if null a interface is rendered)
51
     */
52 2
    public function render(string $namespace, ?string $use = null, ?string $exceptionName = null): string
53
    {
54 2
        $model = new ViewModel();
55
        //replace because it will be added in template anyway
56 2
        $namespace = str_replace(Exception::class, '', $namespace);
57 2
        if (null !== $exceptionName) {
58 1
            $model->setTemplate('exception');
59 1
            $model->setVariable('exceptionName', $exceptionName);
60 1
            $model->setVariable('use', empty($use) ? $exceptionName : $use);
61
        } else {
62 1
            $model->setTemplate('interface');
63 1
            $model->setVariable('use', $use);
64
        }
65
66 2
        $model->setVariable('namespace', rtrim($namespace, '\\'));
67 2
        $model->setVariable('created', new DateTime());
68 2
        $model->setVariable('user', $this->getUsername());
69 2
        return $this->renderer->render($model);
70
    }
71
72
    private function getUsername(): ?string
73
    {
74
        if (defined('USER')) {
75
            return USER;
76
        }
77
78
        $user = getenv('USER');
79
        if (! empty($user)) {
80
            return $user;
81
        }
82
83
        $user = getenv('USERNAME');
84
        if (! empty($user)) {
85
            return $user;
86
        }
87
88
        return null;
89
    }
90
91 1
    public function getRenderer(): PhpRenderer
92
    {
93 1
        return $this->renderer;
94
    }
95
}
96