src/Prettus/Repository/Generators/RepositoryEloquentGenerator.php
<?php
namespace Prettus\Repository\Generators;
use Prettus\Repository\Generators\Migrations\SchemaParser;
/**
* Class RepositoryEloquentGenerator
*
* @package Prettus\Repository\Generators
*/
class RepositoryEloquentGenerator extends Generator
{
/**
* Get stub name.
*
* @var string
*/
protected $stub = 'repository/eloquent';
/**
* Get root namespace.
*
* @return string
*/
public function getRootNamespace()
{
return parent::getRootNamespace() . parent::getConfigGeneratorClassPath($this->getPathConfigNode());
}
/**
* Get generator path config node.
*
* @return string
*/
public function getPathConfigNode()
{
return 'repositories';
}
/**
* Get destination path for generated file.
*
* @return string
*/
public function getPath()
{
return $this->getBasePath() .
'/' .
parent::getConfigGeneratorClassPath($this->getPathConfigNode(), true) .
'/' .
$this->getName() .
'RepositoryEloquent.php';
}
/**
* Get base path of destination file.
*
* @return string
*/
public function getBasePath()
{
return config('repository.generator.basePath', app()->path());
}
/**
* Get array replacements.
*
* @return array
*/
public function getReplacements()
{
$repository = parent::getRootNamespace() . parent::getConfigGeneratorClassPath('interfaces') . '\\' . $this->name . 'Repository;';
$repository = str_replace(
[
"\\",
'/',
],
'\\',
$repository
);
return array_merge(
parent::getReplacements(),
[
'fillable' => $this->getFillable(),
'use_validator' => $this->getValidatorUse(),
'validator' => $this->getValidatorMethod(),
'repository' => $repository,
'model' => isset($this->options['model']) ? $this->options['model'] : '',
]
);
}
/**
* Get the fillable attributes.
*
* @return string
*/
public function getFillable()
{
if (!$this->fillable) {
return '[]';
}
$results = '[' . PHP_EOL;
foreach ($this->getSchemaParser()->toArray() as $column => $value) {
$results .= "\t\t'{$column}'," . PHP_EOL;
}
return $results . "\t" . ']';
}
/**
* Get schema parser.
*
* @return SchemaParser
*/
public function getSchemaParser()
{
return new SchemaParser($this->fillable);
}
public function getValidatorUse()
{
$validator = $this->getValidator();
return "use {$validator};";
}
public function getValidator()
{
$validatorGenerator = new ValidatorGenerator(
[
'name' => $this->name,
'rules' => $this->rules,
'force' => $this->force,
]
);
$validator = $validatorGenerator->getRootNamespace() . '\\' . $validatorGenerator->getName();
return str_replace(
[
"\\",
'/',
],
'\\',
$validator
) . 'Validator';
}
public function getValidatorMethod()
{
if ($this->validator != 'yes') {
return '';
}
$class = $this->getClass();
return '/**' .
PHP_EOL .
' * Specify Validator class name' .
PHP_EOL .
' *' .
PHP_EOL .
' * @return mixed' .
PHP_EOL .
' */' .
PHP_EOL .
' public function validator()' .
PHP_EOL .
' {' .
PHP_EOL .
PHP_EOL .
' return ' .
$class .
'Validator::class;' .
PHP_EOL .
' }' .
PHP_EOL;
}
}