Completed
Push — master ( 146f46...ce721c )
by Thomas
03:30
created

CodeGeneratorConfig::getDefaultOptions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 1

Importance

Changes 3
Bugs 0 Features 1
Metric Value
c 3
b 0
f 1
dl 0
loc 10
ccs 8
cts 8
cp 1
rs 9.4285
cc 1
eloc 7
nc 1
nop 0
crap 1
1
<?php
2
namespace gossi\codegen\config;
3
4
use Symfony\Component\OptionsResolver\OptionsResolver;
5
use Symfony\Component\OptionsResolver\Options;
6
7
/**
8
 * Configuration for code generator
9
 * 
10
 * @author gossi
11
 */
12
class CodeGeneratorConfig {
13
14
	protected $options;
15
16
	/**
17
	 * Creates a new configuration for code generator
18
	 * 
19
	 * @see https://php-code-generator.readthedocs.org/en/latest/generator.html
20
	 * @param array $options
21
	 */
22 28
	public function __construct(array $options = []) {
23 28
		$resolver = new OptionsResolver();
24 28
		$resolver->setDefined($this->getOptionalOptions());
25 28
		$resolver->setDefaults($this->getDefaultOptions());
26 28
		foreach ($this->getAllowedOptionTypes() as $option => $type) {
27 28
			$resolver->setAllowedTypes($option, $type);
28 28
		}
29 28
		$this->options = $resolver->resolve($options);
30 28
	}
31
32 28
	protected function getOptionalOptions() {
33
		return [
34 28
			'generateDocblock',
35 28
			'generateEmptyDocblock',
36 28
			'generateScalarTypeHints',
37 28
			'generateReturnTypeHints',
38 28
		];
39
	}
40
41 28
	protected function getDefaultOptions() {
42
		return [
43 28
			'generateDocblock' => true,
44 28
			'generateEmptyDocblock' => function (Options $options) {
45 10
				return $options['generateDocblock'];
46 28
			},
47 28
			'generateScalarTypeHints' => false,
48 28
			'generateReturnTypeHints' => false,
49 28
		];
50
	}
51
52 28
	protected function getAllowedOptionTypes() {
53
		return [
54 28
			'generateDocblock' => 'bool',
55 28
			'generateEmptyDocblock' => 'bool',
56 28
			'generateScalarTypeHints' => 'bool',
57 28
			'generateReturnTypeHints' => 'bool',
58 28
		];
59
	}
60
61
	/**
62
	 * Returns whether docblocks should be generated
63
	 * 
64
	 * @return boolean `true` if they will be generated and `false` if not
65
	 */
66 19
	public function getGenerateDocblock() {
67 19
		return $this->options['generateDocblock'];
68
	}
69
70
	/**
71
	 * Sets whether docblocks should be generated
72
	 *
73
	 * @param boolean $generate `true` if they will be generated and `false` if not
74
	 * @return $this
75
	 */
76 1
	public function setGenerateDocblock($generate) {
77 1
		$this->options['generateDocblock'] = $generate;
78 1
		if (!$generate) {
79 1
			$this->options['generateEmptyDocblock'] = $generate;
80 1
		}
81 1
		return $this;
82
	}
83
84
	/**
85
	 * Returns whether empty docblocks are generated
86
	 * 
87
	 * @return boolean `true` if they will be generated and `false` if not
88
	 */
89 24
	public function getGenerateEmptyDocblock() {
90 24
		return $this->options['generateEmptyDocblock'];
91
	}
92
93
	/**
94
	 * Sets whether empty docblocks are generated
95
	 *
96
	 * @param boolean $generate `true` if they will be generated and `false` if not
97
	 * @return $this
98
	 */
99 1
	public function setGenerateEmptyDocblock($generate) {
100 1
		$this->options['generateEmptyDocblock'] = $generate;
101 1
		if ($generate) {
102 1
			$this->options['generateDocblock'] = $generate;
103 1
		}
104 1
		return $this;
105
	}
106
107
	/**
108
	 * Returns whether scalar type hints will be generated for method parameters (PHP 7)
109
	 * 
110
	 * @return boolean `true` if they will be generated and `false` if not
111
	 */
112 9
	public function getGenerateScalarTypeHints() {
113 9
		return $this->options['generateScalarTypeHints'];
114
	}
115
116
	/**
117
	 * Sets whether scalar type hints will be generated for method parameters (PHP 7)
118
	 *
119
	 * @param boolean $generate `true` if they will be generated and `false` if not
120
	 * @return $this
121
	 */
122 1
	public function setGenerateScalarTypeHints($generate) {
123 1
		$this->options['generateScalarTypeHints'] = $generate;
124 1
		return $this;
125
	}
126
127
	/**
128
	 * Returns whether return type hints will be generated for method parameters (PHP 7)
129
	 * 
130
	 * @return boolean `true` if they will be generated and `false` if not
131
	 */
132 20
	public function getGenerateReturnTypeHints() {
133 20
		return $this->options['generateReturnTypeHints'];
134
	}
135
136
	/**
137
	 * Sets whether return type hints will be generated for method parameters (PHP 7)
138
	 *
139
	 * @param boolean $generate `true` if they will be generated and `false` if not
140
	 * @return $this
141
	 */
142 1
	public function setGenerateReturnTypeHints($generate) {
143 1
		$this->options['generateReturnTypeHints'] = $generate;
144 1
		return $this;
145
	}
146
}