InstancesConfigurator   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
eloc 21
c 1
b 0
f 0
dl 0
loc 51
ccs 22
cts 22
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A configureEditableOptions() 0 4 1
A getEditablesExpressionAttributes() 0 5 1
A supportsEditable() 0 3 1
A doCreateEditables() 0 27 4
1
<?php
2
3
namespace Khusseini\PimcoreRadBrickBundle\Configurator;
4
5
use ArrayObject;
6
use Khusseini\PimcoreRadBrickBundle\RenderArgument;
7
use Khusseini\PimcoreRadBrickBundle\RenderArgumentEmitter;
8
use Symfony\Component\OptionsResolver\OptionsResolver;
9
10
class InstancesConfigurator extends AbstractConfigurator
11
{
12 3
    public function supportsEditable(string $editableName, array $config): bool
13
    {
14 3
        return isset($config['instances']);
15
    }
16
17 3
    public function getEditablesExpressionAttributes(): array
18
    {
19 3
        return array_merge(
20 3
            parent::getEditablesExpressionAttributes(),
21 3
            ['[editable][instances]']
22
        );
23
    }
24
25 3
    public function doCreateEditables(
26
        RenderArgumentEmitter $emitter,
27
        string $name,
28
        ConfiguratorData $data
29
    ): void {
30 3
        $argument = $emitter->get($name);
31 3
        $config = $data->getConfig();
32 3
        $instances = $config['instances'];
33
34 3
        if ($instances < 1) {
35 1
            $argument = new RenderArgument('null', $name);
36
        }
37
38 3
        if ($instances > 1) {
39 1
            $editables = new ArrayObject();
40 1
            for ($i = 0; $i < $instances; ++$i) {
41 1
                $editables[] = new RenderArgument(
42 1
                    $argument->getType(),
43 1
                    (string) $i,
44 1
                    $argument->getValue()
45
                );
46
            }
47
48 1
            $argument = new RenderArgument('collection', $name, $editables);
49
        }
50
51 3
        $emitter->emitArgument($argument);
52 3
    }
53
54
    /**
55
     * @codeCoverageIgnore
56
     */
57
    public function configureEditableOptions(OptionsResolver $or): void
58
    {
59
        $or->setDefault('instances', 1);
60
        $or->setAllowedTypes('instances', ['int', 'string']);
61
    }
62
}
63