Generator   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 59
rs 10
wmc 3
lcom 1
cbo 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A generate() 0 18 2
1
<?php
2
3
namespace Sugarcrm\UpgradeSpec\Spec;
4
5
use Sugarcrm\UpgradeSpec\Context\Upgrade;
6
use Sugarcrm\UpgradeSpec\Element\Generator as ElementGenerator;
7
use Sugarcrm\UpgradeSpec\Element\Provider;
8
use Sugarcrm\UpgradeSpec\Formatter\FormatterInterface;
9
use Sugarcrm\UpgradeSpec\Spec\Exception\GeneratorException;
10
11
class Generator
12
{
13
    /**
14
     * @var Provider
15
     */
16
    private $elementProvider;
17
18
    /**
19
     * @var ElementGenerator
20
     */
21
    private $elementGenerator;
22
23
    /**
24
     * @var FormatterInterface
25
     */
26
    private $formatter;
27
28
    /**
29
     * SpecGenerator constructor.
30
     *
31
     * @param Provider           $elementProvider
32
     * @param ElementGenerator   $elementGenerator
33
     * @param FormatterInterface $formatter
34
     */
35
    public function __construct(Provider $elementProvider,
36
        ElementGenerator $elementGenerator,
37
        FormatterInterface $formatter
38
    ) {
39
        $this->elementGenerator = $elementGenerator;
40
        $this->formatter = $formatter;
41
        $this->elementProvider = $elementProvider;
42
    }
43
44
    /**
45
     * @param Upgrade $context
46
     *
47
     * @return string
48
     *
49
     * @throws GeneratorException
50
     */
51
    public function generate(Upgrade $context)
52
    {
53
        try {
54
            $delimiter = $this->formatter->getDelimiter();
55
            $elements = $this->elementProvider->getSuitableElements($context);
56
57
            $title = $this->formatter->asTitle(sprintf('SugarCRM upgrade: %s', $context)) . $delimiter;
58
59
            return $title . implode($delimiter, array_map(
60
                function ($element) use ($context) {
61
                    return $this->elementGenerator->generate($element, $context);
62
                },
63
                $elements
64
            ));
65
        } catch (\Exception $e) {
66
            throw new GeneratorException($e->getMessage(), $e->getCode(), $e);
67
        }
68
    }
69
}
70