ThemePresenter   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 6
dl 0
loc 44
ccs 0
cts 30
cp 0
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A addSlideRenderer() 0 4 1
A present() 0 16 2
A renderSlide() 0 8 2
1
<?php declare(strict_types=1);
2
3
namespace Bigwhoop\Trumpet\Presentation;
4
5
use Bigwhoop\Trumpet\Config\Presentation;
6
use Bigwhoop\Trumpet\Config\Slide;
7
use Bigwhoop\Trumpet\Presentation\SlideRendering\SlideRenderer;
8
use Bigwhoop\Trumpet\Presentation\Theming\Theme;
9
use Handlebars\Handlebars;
10
11
final class ThemePresenter implements Presenter
12
{
13
    /** @var Theme */
14
    private $theme;
15
16
    /** @var SlideRenderer[] */
17
    private $slideRenderers = [];
18
    
19
    public function __construct(Theme $theme)
20
    {
21
        $this->theme = $theme;
22
    }
23
    
24
    public function addSlideRenderer(SlideRenderer $slideRenderer)
25
    {
26
        $this->slideRenderers[] = $slideRenderer;
27
    }
28
    
29
    public function present(Presentation $presentation): string
30
    {
31
        foreach ($presentation->slides as $slide) {
32
            $this->renderSlide($slide);
33
        }
34
35
        return $this->theme->render([
36
            'title'          => $presentation->title,
37
            'subtitle'       => $presentation->subtitle,
38
            'date'           => $presentation->date->toString(),
39
            'presenters'     => $presentation->authors,
40
            'license'        => $presentation->license,
41
            'theme_settings' => $presentation->themeSettings,
42
            'slides'         => $presentation->slides->getAll(),
43
        ]);
44
    }
45
    
46
    private function renderSlide(Slide $slide): Slide
47
    {
48
        foreach ($this->slideRenderers as $renderer) {
49
            $slide->content = $renderer->render($slide);
50
        }
51
52
        return $slide;
53
    }
54
}
55