Skip to content

Commit 47256dd

Browse files
committed
Clean-up field generator
1 parent 63c2999 commit 47256dd

File tree

3 files changed

+31
-27
lines changed

3 files changed

+31
-27
lines changed

src/Command/Field.php

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace DrupalCodeGenerator\Command;
44

55
use DrupalCodeGenerator\Utils;
6+
use stdClass;
67

78
/**
89
* Implements field command.
@@ -17,7 +18,7 @@ final class Field extends ModuleGenerator {
1718
*
1819
* @var array
1920
*/
20-
protected $subTypes = [
21+
private $subTypes = [
2122
'boolean' => [
2223
'label' => 'Boolean',
2324
'list' => FALSE,
@@ -154,50 +155,45 @@ protected function generate(array &$vars): void {
154155
// Indicates that at least one of sub-fields is of datetime type.
155156
$vars['datetime'] = FALSE;
156157

158+
$vars['type_class'] = '{field_label|camelize}Item';
159+
$vars['widget_class'] = '{field_label|camelize}Widget';
160+
$vars['formatter_class'] = '{field_label|camelize}DefaultFormatter';
161+
157162
for ($i = 1; $i <= $vars['subfield_count']; $i++) {
158163
$this->io->writeln(\sprintf('<fg=green>%s</>', \str_repeat('', 50)));
159164

160-
$vars['name_' . $i] = $this->ask("Label for sub-field #$i", "Value $i");
161-
$default_machine_name = Utils::human2machine($vars['name_' . $i]);
162-
$vars['machine_name_' . $i] = $this->ask("Machine name for sub-field #$i", $default_machine_name);
163-
$type = $this->choice("Type of sub-field #$i", $type_choices, 'Text');
164-
165-
$vars['type_class'] = '{field_label|camelize}Item';
166-
$vars['widget_class'] = '{field_label|camelize}Widget';
167-
$vars['formatter_class'] = '{field_label|camelize}DefaultFormatter';
165+
$subfield = new stdClass();
168166

169-
$definition = $this->subTypes[$type];
170-
$vars['type_' . $i] = $definition['label'];
167+
$subfield->name = $this->ask("Label for sub-field #$i", "Value $i");
168+
$subfield->machineName = $this->ask("Machine name for sub-field #$i", Utils::human2machine($subfield->name));
169+
$type = $this->choice("Type of sub-field #$i", $type_choices, 'Text');
171170

172171
if ($type == 'datetime') {
173-
$vars['date_type_' . $i] = $this->choice("Date type for sub-field #$i", $this->dateTypes, 'Date only');
172+
$subfield->dateType = $this->choice("Date type for sub-field #$i", $this->dateTypes, 'Date only');
174173
}
175174

175+
$definition = $this->subTypes[$type];
176176
if ($definition['list']) {
177-
$vars['list_' . $i] = $this->confirm("Limit allowed values for sub-field #$i?", FALSE);
177+
$subfield->list = $this->confirm("Limit allowed values for sub-field #$i?", FALSE);
178178
}
179-
$vars['required_' . $i] = $this->confirm("Make sub-field #$i required?", FALSE);
180-
181-
$machine_name = $vars['machine_name_' . $i];
179+
$subfield->required = $this->confirm("Make sub-field #$i required?", FALSE);
182180

183-
// Group sub-field vars.
181+
// Build sub-field vars.
184182
$vars['subfields'][$i] = [
185-
'name' => $vars['name_' . $i],
186-
'machine_name' => $machine_name,
183+
'name' => $subfield->name,
184+
'machine_name' => $subfield->machineName,
187185
'type' => $type,
188186
'data_type' => $definition['data_type'],
189-
'list' => !empty($vars['list_' . $i]),
190-
'allowed_values_method' => 'allowed' . Utils::camelize($vars['name_' . $i], TRUE) . 'Values',
191-
'required' => $vars['required_' . $i],
187+
'list' => !empty($subfield->list),
188+
'allowed_values_method' => 'allowed' . Utils::camelize($subfield->name, TRUE) . 'Values',
189+
'required' => $subfield->required,
192190
'link' => $definition['link'],
193191
];
194-
if (isset($vars['date_type_' . $i])) {
195-
$date_type = $vars['date_type_' . $i];
196-
$vars['subfields'][$i]['date_type'] = $date_type;
192+
if (isset($subfield->dateType)) {
193+
$vars['subfields'][$i]['date_type'] = $subfield->dateType;
197194
// Back to date type ID.
198-
$vars['subfields'][$i]['date_storage_format'] = $date_type == 'date' ? 'Y-m-d' : 'Y-m-d\TH:i:s';
195+
$vars['subfields'][$i]['date_storage_format'] = $subfield->dateType == 'date' ? 'Y-m-d' : 'Y-m-d\TH:i:s';
199196
}
200-
unset($vars['name_' . $i], $vars['machine_name_' . $i], $vars['type_' . $i], $vars['list_' . $i], $vars['required_' . $i], $vars['date_type_' . $i]);
201197

202198
if ($definition['random']) {
203199
$vars['random'] = TRUE;

templates/field/schema.twig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ field.storage_settings.{{ field_id }}:
99
label: Foo
1010
{% endif %}
1111
{% if instance_settings %}
12+
1213
# Field instance.
1314
field.field_settings.{{ field_id }}:
1415
type: mapping
@@ -18,6 +19,7 @@ field.field_settings.{{ field_id }}:
1819
type: string
1920
label: Bar
2021
{% endif %}
22+
2123
# Default value.
2224
field.value.{{ field_id }}:
2325
type: mapping
@@ -29,6 +31,7 @@ field.value.{{ field_id }}:
2931
label: {{ subfield.name }}
3032
{% endfor %}
3133
{% if widget_settings %}
34+
3235
# Field widget.
3336
field.widget.settings.{{ field_id }}:
3437
type: mapping
@@ -39,6 +42,7 @@ field.widget.settings.{{ field_id }}:
3942
label: Foo
4043
{% endif %}
4144
{% if formatter_settings %}
45+
4246
# Field formatter.
4347
field.formatter.settings.{{ field_id }}_default:
4448
type: mapping

tests/dcg/Generator/_field/_schema.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ field.storage_settings.example_foo:
66
foo:
77
type: string
88
label: Foo
9+
910
# Field instance.
1011
field.field_settings.example_foo:
1112
type: mapping
@@ -14,6 +15,7 @@ field.field_settings.example_foo:
1415
bar:
1516
type: string
1617
label: Bar
18+
1719
# Default value.
1820
field.value.example_foo:
1921
type: mapping
@@ -79,6 +81,7 @@ field.value.example_foo:
7981
value_20:
8082
type: datetime
8183
label: Value 20
84+
8285
# Field widget.
8386
field.widget.settings.example_foo:
8487
type: mapping
@@ -87,6 +90,7 @@ field.widget.settings.example_foo:
8790
foo:
8891
type: string
8992
label: Foo
93+
9094
# Field formatter.
9195
field.formatter.settings.example_foo_default:
9296
type: mapping

0 commit comments

Comments
 (0)