Completed
Push — master ( 83c363...ccf8c1 )
by Thomas
03:58
created

ModelGenerator::getWriter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php
2
declare(strict_types=1);
3
4
namespace gossi\codegen\generator;
5
6
use gossi\codegen\config\CodeGeneratorConfig;
7
use gossi\codegen\generator\utils\Writer;
8
use gossi\codegen\model\AbstractModel;
9
use gossi\formatter\Formatter;
10
11
/**
12
 * Model Generator
13
 *
14
 * @author Thomas Gossmann
15
 */
16
class ModelGenerator {
17
18
	/** @var Writer */
19
	private $writer;
20
21
	/** @var BuilderFactory */
22
	private $factory;
23
24
	/** @var CodeGeneratorConfig */
25
	private $config;
26
27
	/** @var Formatter */
28
	private $formatter;
29
30
	/**
31
	 *
32
	 * @param CodeGeneratorConfig|array $config
33
	 */
34 43
	public function __construct($config = null) {
35 43
		if (is_array($config)) {
36 7
			$this->config = new CodeGeneratorConfig($config);
37 37
		} else if ($config instanceof CodeGeneratorConfig) {
38 10
			$this->config = $config;
39
		} else {
40 29
			$this->config = new CodeGeneratorConfig(['generateDocblock' => false]);
41
		}
42
43 43
		$profile = $this->config->getProfile();
44 43
		$this->writer = new Writer([
45 43
			'indentation_character' => $profile->getIndentation('character') == 'tab' ? "\t" : ' ',
46 43
			'indentation_size' => $profile->getIndentation('size')
47
		]);
48 43
		$this->formatter = new Formatter($profile);
49 43
		$this->factory = new BuilderFactory($this);
50 43
	}
51
52
	/**
53
	 */
54 43
	public function getConfig(): CodeGeneratorConfig {
55 43
		return $this->config;
56
	}
57
58
	/**
59
	 *
60
	 */
61 43
	public function getWriter(): Writer {
62 43
		return $this->writer;
63
	}
64
65
	/**
66
	 *
67
	 */
68 6
	public function getFactory(): BuilderFactory {
69 6
		return $this->factory;
70
	}
71
72
	/**
73
	 * @param AbstractModel $model
74
	 */
75 41
	public function generate(AbstractModel $model): string {
76 41
		$this->writer->reset();
77
78 41
		$builder = $this->factory->getBuilder($model);
79 41
		$builder->build($model);
80
81 41
		$code = $this->writer->getContent();
82
83 41
		if ($this->config->isFormattingEnabled()) {
84
			$code = $this->formatter->format($code);
85
		}
86
87 41
		return $code;
88
	}
89
}
90