Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
17 / 17
AbstractGenerator
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
6 / 6
13
100.00% covered (success)
100.00%
17 / 17
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 generate
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
3 / 3
 makeDirectory
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
3 / 3
 checkFileExist
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
3 / 3
 validateConfig
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 getOptions
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 createFile
n/a
0 / 0
0
n/a
0 / 0
1<?php
2
3namespace Qmp\Laravel\FileGenerator\Services\FileGenerator\Generators;
4
5use Illuminate\Support\Facades\Log;
6use Illuminate\Support\Facades\Validator;
7use Qmp\Laravel\FileGenerator\Config;
8use Qmp\Laravel\FileGenerator\Services\FileGenerator\Exceptions\ConfigGeneratorException;
9use Qmp\Laravel\FileGenerator\Services\FileGenerator\Exceptions\FileNotExistException;
10
11abstract class AbstractGenerator implements GeneratorInterface
12{
13    protected const DEFAULT_RULES = [
14        'output_path' => 'required|string'
15    ];
16
17    /**
18     * @var array
19     */
20    protected array $options = [];
21
22    /**
23     * @var \Qmp\Laravel\FileGenerator\Config
24     */
25    protected Config $config;
26
27    /**
28     * @var array|string[]
29     */
30    protected array $rules = [];
31
32    /**
33     * Undocumented variable
34     *
35     * @var boolean
36     */
37    protected bool $distant = false;
38
39    /**
40     * @param \Qmp\Laravel\FileGenerator\Config $config
41     * @throws \Qmp\Laravel\FileGenerator\Services\FileGenerator\Exceptions\ConfigGeneratorException
42     */
43    public function __construct(Config $config)
44    {
45        $this->config = $this->validateConfig($config);
46    }
47
48    /**
49     * @throws \Qmp\Laravel\FileGenerator\Services\FileGenerator\Exceptions\FileNotExistException
50     */
51    public function generate(): string
52    {
53        $this->makeDirectory();
54        $file = $this->createFile();
55
56        return $this->checkFileExist($this->distant ? $file : $this->config->output_path);
57    }
58
59    /**
60     *
61     */
62    protected function makeDirectory()
63    {
64        if (!is_dir(dirname($this->config->output_path))) {
65            mkdir(dirname($this->config->output_path), 0755, true);
66        }
67    }
68
69    /**
70     * @param string $filename
71     * @return string filename
72     * @throws \Qmp\Laravel\FileGenerator\Services\FileGenerator\Exceptions\FileNotExistException
73     */
74    protected function checkFileExist(string $filename): string
75    {
76        if((!$this->distant && !file_exists($filename)) || ($this->distant && $filename === "")) {
77            throw new FileNotExistException($filename);
78        }
79
80        return $filename;
81    }
82
83    /**
84     * @param \Qmp\Laravel\FileGenerator\Config $config
85     * @return \Qmp\Laravel\FileGenerator\Config
86     * @throws \Qmp\Laravel\FileGenerator\Services\FileGenerator\Exceptions\ConfigGeneratorException
87     */
88    protected function validateConfig(Config $config): Config
89    {
90        $rules = array_merge(self::DEFAULT_RULES, $this->rules);
91
92        $validator = Validator::make($config->toArray(), $rules);
93
94        if ($validator->fails()) {
95            throw new ConfigGeneratorException($config->type, $validator->errors());
96        }
97
98        return $config;
99    }
100
101    /**
102     * @return array
103     */
104    protected function getOptions(): array
105    {
106        return array_merge($this->options, $this->config->options);
107    }
108
109    /**
110     *
111     */
112    abstract protected function createFile();
113}