Passed
Push — develop ( ac3052...955933 )
by nguereza
04:41
created

MakeRepositoryCommand::getEntityBody()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 5
rs 10
1
<?php
2
3
/**
4
 * Platine Framework
5
 *
6
 * Platine Framework is a lightweight, high-performance, simple and elegant
7
 * PHP Web framework
8
 *
9
 * This content is released under the MIT License (MIT)
10
 *
11
 * Copyright (c) 2020 Platine Framework
12
 *
13
 * Permission is hereby granted, free of charge, to any person obtaining a copy
14
 * of this software and associated documentation files (the "Software"), to deal
15
 * in the Software without restriction, including without limitation the rights
16
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
 * copies of the Software, and to permit persons to whom the Software is
18
 * furnished to do so, subject to the following conditions:
19
 *
20
 * The above copyright notice and this permission notice shall be included in all
21
 * copies or substantial portions of the Software.
22
 *
23
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
 * SOFTWARE.
30
 */
31
32
/**
33
 *  @file MakeRepositoryCommand.php
34
 *
35
 *  The Make Repository Command class
36
 *
37
 *  @package    Platine\Framework\Console\Command
38
 *  @author Platine Developers team
39
 *  @copyright  Copyright (c) 2020
40
 *  @license    http://opensource.org/licenses/MIT  MIT License
41
 *  @link   http://www.iacademy.cf
42
 *  @version 1.0.0
43
 *  @filesource
44
 */
45
46
declare(strict_types=1);
47
48
namespace Platine\Framework\Console\Command;
49
50
use Platine\Console\Input\Reader;
51
use Platine\Console\Output\Writer;
52
use Platine\Filesystem\Filesystem;
53
use Platine\Framework\App\Application;
54
use Platine\Framework\Console\MakeCommand;
55
56
/**
57
 * @class MakeRepositoryCommand
58
 * @package Platine\Framework\Console\Command
59
 */
60
class MakeRepositoryCommand extends MakeCommand
61
{
62
    /**
63
     * {@inheritdoc}
64
     */
65
    protected string $type = 'repository';
66
67
    /**
68
     * The entity class name
69
     * @var string
70
     */
71
    protected string $entityClass;
72
73
    /**
74
     * Create new instance
75
     * @param Application $application
76
     * @param Filesystem $filesystem
77
     */
78
    public function __construct(
79
        Application $application,
80
        Filesystem $filesystem
81
    ) {
82
        parent::__construct($application, $filesystem);
83
        $this->setName('make:repository')
84
               ->setDescription('Command to generate new repository class');
85
    }
86
87
    /**
88
     * {@inheritdoc}
89
     */
90
    public function interact(Reader $reader, Writer $writer): void
91
    {
92
        parent::interact($reader, $writer);
93
94
95
        $io = $this->io();
96
97
        $entityClass = $io->prompt('Enter the entity full class name', null);
98
        while (!class_exists($entityClass)) {
99
            $entityClass = $io->prompt('Class does not exists, please enter the entity full class name', null);
100
        }
101
102
        $this->entityClass = $entityClass;
103
    }
104
105
    /**
106
     * {@inheritdoc}
107
     */
108
    public function getClassTemplate(): string
109
    {
110
        return <<<EOF
111
        <?php
112
        
113
        declare(strict_types=1);
114
        
115
        namespace %namespace%;
116
        
117
        use Platine\Orm\EntityManager;
118
        use Platine\Orm\Repository;
119
        %uses%
120
121
        /**
122
        * @class %classname%
123
        * @package %namespace%
124
        */
125
        class %classname% extends Repository
126
        {
127
            
128
            /**
129
            * Create new instance
130
            * @param EntityManager \$manager
131
            */
132
           public function __construct(EntityManager \$manager)
133
           {
134
               parent::__construct(\$manager, %entity_class%);
135
           }
136
        }
137
        
138
        EOF;
139
    }
140
141
    /**
142
     * {@inheritdoc}
143
     */
144
    protected function createClass(): string
145
    {
146
        $content = parent::createClass();
147
148
        return $this->getEntityBody($content);
149
    }
150
151
    /**
152
     * {@inheritdoc}
153
     */
154
    protected function getUsesContent(): string
155
    {
156
        return $this->getUsesTemplate($this->entityClass);
157
    }
158
159
    /**
160
     * Return the entity body
161
     * @param string $content
162
     * @return string
163
     */
164
    protected function getEntityBody(string $content): string
165
    {
166
        $entityName = basename($this->entityClass) . '::class';
167
168
        return str_replace('%entity_class%', $entityName, $content);
169
    }
170
}
171