Passed
Push — master ( 53f538...807973 )
by Oleg
02:07
created

GetsActionCommand   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 51
dl 0
loc 85
ccs 53
cts 53
cp 1
rs 10
c 0
b 0
f 0
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A configure() 0 6 1
A execute() 0 67 1
1
<?php
2
declare(strict_types=1);
3
4
namespace SlayerBirden\DFCodeGeneration\Command\Controllers;
5
6
use SlayerBirden\DFCodeGeneration\Command\AbstractApiCommand;
7
use SlayerBirden\DFCodeGeneration\Generator\Config\Code\Parts\DefaultCodeFeederPart;
8
use SlayerBirden\DFCodeGeneration\Generator\Config\Code\SplitArrayCodeFeeder;
9
use SlayerBirden\DFCodeGeneration\Generator\Config\ConfigGenerator;
10
use SlayerBirden\DFCodeGeneration\Generator\Config\Parts;
11
use SlayerBirden\DFCodeGeneration\Generator\Config\Providers\Decorators\EntitiesSrcDecorator;
12
use SlayerBirden\DFCodeGeneration\Generator\Config\Providers\Decorators\HydratorDecorator;
13
use SlayerBirden\DFCodeGeneration\Generator\Config\Providers\Decorators\NameSpaceDecorator as ConfigNsDecorator;
14
use SlayerBirden\DFCodeGeneration\Generator\Config\Providers\Decorators\OwnerDecorator;
15
use SlayerBirden\DFCodeGeneration\Generator\Controllers\GetsGenerator;
16
use SlayerBirden\DFCodeGeneration\Generator\Controllers\Providers\Decorators\EntityNamePluralDecorator;
17
use SlayerBirden\DFCodeGeneration\Generator\Controllers\Providers\Decorators\NameSpaceDecorator as ControllerNSDecorator;
18
use SlayerBirden\DFCodeGeneration\Generator\Controllers\Providers\Decorators\RelationsProviderDecorator;
19
use SlayerBirden\DFCodeGeneration\Generator\DataProvider\BaseProvider;
20
use SlayerBirden\DFCodeGeneration\Generator\DataProvider\CachedProvider;
21
use SlayerBirden\DFCodeGeneration\Generator\DataProvider\DecoratedProvider;
22
use SlayerBirden\DFCodeGeneration\Generator\Factory\HydratorFactoryGenerator;
23
use SlayerBirden\DFCodeGeneration\Generator\Factory\Providers\Decorators\HydratorDecorator as FactoryHydratorDecorator;
24
use SlayerBirden\DFCodeGeneration\Generator\Factory\Providers\Decorators\NameSpaceDecorator as FactoryNSDecorator;
25
use SlayerBirden\DFCodeGeneration\Generator\Factory\RepositoryFactoryGenerator;
26
use Symfony\Component\Console\Input\InputInterface;
27
use Symfony\Component\Console\Output\OutputInterface;
28
29
final class GetsActionCommand extends AbstractApiCommand
30
{
31 2
    protected function configure()
32
    {
33 2
        parent::configure();
34 2
        $this->setName('action:gets')
35 2
            ->setDescription('Get List action controller and support configuration.')
36 2
            ->setHelp('This command creates the Get List Action for given entity.');
37 2
    }
38
39
    /**
40
     * {@inheritdoc}
41
     * @param InputInterface $input
42
     * @param OutputInterface $output
43
     * @throws \Twig_Error_Loader
44
     * @throws \Twig_Error_Runtime
45
     * @throws \Twig_Error_Syntax
46
     */
47 2
    protected function execute(InputInterface $input, OutputInterface $output)
48
    {
49 2
        $baseProvider = new BaseProvider($this->entityClassName);
50 2
        $controllerNsDecorator = new ControllerNSDecorator($this->entityClassName);
51
52 2
        $controllerGenerator = new GetsGenerator(
53 2
            new CachedProvider(
54 2
                new DecoratedProvider(
55 2
                    $baseProvider,
56 2
                    $controllerNsDecorator,
57 2
                    new EntityNamePluralDecorator()
58
                )
59
            )
60
        );
61 2
        $this->writer->write($controllerGenerator->generate(), $controllerGenerator->getFileName());
0 ignored issues
show
Bug introduced by
The method write() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

61
        $this->writer->/** @scrutinizer ignore-call */ 
62
                       write($controllerGenerator->generate(), $controllerGenerator->getFileName());

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
62
63 2
        $configDataProvider = new CachedProvider(
64 2
            new DecoratedProvider(
65 2
                $baseProvider,
66 2
                new EntitiesSrcDecorator($this->entityClassName),
67 2
                new ConfigNsDecorator($this->entityClassName),
68 2
                $controllerNsDecorator,
69 2
                new HydratorDecorator($this->entityClassName),
70 2
                new FactoryNSDecorator($this->entityClassName),
71 2
                new FactoryHydratorDecorator($this->entityClassName),
72 2
                new OwnerDecorator($this->entityClassName),
73 2
                new EntityNamePluralDecorator()
74
            )
75
        );
76 2
        $configGenerator = new ConfigGenerator(
77 2
            $configDataProvider,
78 2
            new SplitArrayCodeFeeder(
79 2
                new DefaultCodeFeederPart()
80
            ),
81 2
            new Parts\Doctrine($configDataProvider),
82 2
            new Parts\Gets\AbstractFactory($configDataProvider),
83 2
            new Parts\Gets\Dependencies($configDataProvider),
84 2
            new Parts\Gets\Routes($configDataProvider)
85
        );
86 2
        $this->writer->write($configGenerator->generate(), $configGenerator->getFileName());
87
88 2
        $hydratorFactoryGenerator = new HydratorFactoryGenerator(
89 2
            new CachedProvider(
90 2
                new DecoratedProvider(
91 2
                    $baseProvider,
92 2
                    new RelationsProviderDecorator($this->entityClassName),
93 2
                    new FactoryHydratorDecorator($this->entityClassName),
94 2
                    new FactoryNSDecorator($this->entityClassName)
95
                )
96
            )
97
        );
98 2
        $this->writer->write($hydratorFactoryGenerator->generate(), $hydratorFactoryGenerator->getFileName());
99
100 2
        $repositoryFactoryGenerator = new RepositoryFactoryGenerator(
101 2
            new CachedProvider(
102 2
                new DecoratedProvider(
103 2
                    $baseProvider,
104 2
                    new FactoryNSDecorator($this->entityClassName)
105
                )
106
            )
107
        );
108 2
        $this->writer->write(
109 2
            $repositoryFactoryGenerator->generate(),
110 2
            $repositoryFactoryGenerator->getFileName()
111
        );
112
113 2
        parent::execute($input, $output);
114 2
    }
115
}
116