RepositoryClassWriter::getWriterConfig()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace Janisbiz\LightOrm\Dms\MySQL\Generator\Writer;
4
5
use Janisbiz\LightOrm\Generator\Dms\DmsDatabaseInterface;
6
use Janisbiz\LightOrm\Generator\Dms\DmsTableInterface;
7
use Janisbiz\LightOrm\Generator\Writer\AbstractWriter;
8
use Janisbiz\Heredoc\HeredocTrait;
9
use Janisbiz\LightOrm\Generator\Writer\WriterConfigInterface;
10
11
class RepositoryClassWriter extends AbstractWriter
12
{
13
    use HeredocTrait;
14
15
    /**
16
     * @var EntityClassWriter
17
     */
18
    private $entityClassWriter;
19
20
    /**
21
     * @param WriterConfigInterface $writerConfig
22
     * @param EntityClassWriter $entityClassWriter
23
     */
24
    public function __construct(WriterConfigInterface $writerConfig, EntityClassWriter $entityClassWriter)
25
    {
26
        $this->writerConfig = $writerConfig;
27
        $this->entityClassWriter = $entityClassWriter;
28
    }
29
30
    /**
31
     * @param DmsDatabaseInterface $dmsDatabase
32
     * @param DmsTableInterface $dmsTable
33
     * @param array $existingFiles
34
     *
35
     * @return RepositoryClassWriter
36
     */
37
    public function write(
38
        DmsDatabaseInterface $dmsDatabase,
39
        DmsTableInterface $dmsTable,
40
        array &$existingFiles
41
    ) {
42
        $fileName = $this->generateFileName($dmsDatabase, $dmsTable);
43
44
        return $this
45
            ->writeFile($fileName, $this->generateFileContents($dmsDatabase, $dmsTable), true)
46
            ->removeFileFromExistingFiles($fileName, $existingFiles)
47
        ;
48
    }
49
50
    /**
51
     * @return WriterConfigInterface
52
     */
53
    protected function getWriterConfig(): WriterConfigInterface
54
    {
55
        return $this->writerConfig;
56
    }
57
58
    /**
59
     * @param DmsDatabaseInterface $dmsDatabase
60
     * @param DmsTableInterface $dmsTable
61
     *
62
     * @return string
63
     */
64
    protected function generateFileContents(DmsDatabaseInterface $dmsDatabase, DmsTableInterface $dmsTable): string
65
    {
66
        return /** @lang PHP */
67
            <<<PHP
68
<?php declare(strict_types=1);
69
70
namespace {$this->generateNamespace($dmsDatabase)};
71
72
use Janisbiz\LightOrm\Dms\MySQL\Repository\AbstractRepository;
73
use {$this->entityClassWriter->generateFQDN($dmsDatabase, $dmsTable)};
74
75
class {$this->generateClassName($dmsTable)} extends AbstractRepository
76
{
77
    /**
78
     * @return string
79
     */
80
    protected function getEntityClass(): string
81
    {
82
        return {$this->entityClassWriter->generateClassName($dmsTable)}::class;
83
    }
84
}
85
86
PHP;
87
    }
88
}
89