Skip to content
Snippets Groups Projects
Commit 5e4b5b3a authored by Antonio De Marco's avatar Antonio De Marco
Browse files

#91: Simplify PatternDefinitionField class.

parent 74139e31
Branches
Tags
No related merge requests found
......@@ -22,18 +22,20 @@ class PatternDefinition extends PluginDefinition implements DerivablePluginDefin
*/
const LIBRARY_PREFIX = 'ui_patterns';
private $label;
private $description = '';
private $basePath;
private $fileName;
private $fields = [];
private $use;
private $themeHook;
private $customThemeHook;
private $template;
private $libraries = [];
private $tags;
private $additional = [];
protected $label;
protected $description = '';
protected $basePath;
protected $fileName;
protected $fields = [];
protected $use;
protected $themeHook;
protected $customThemeHook;
protected $template;
protected $libraries = [];
protected $tags;
protected $additional = [];
protected $deriver = '';
protected $provider = '';
/**
* PatternDefinition constructor.
......@@ -203,27 +205,9 @@ class PatternDefinition extends PluginDefinition implements DerivablePluginDefin
* @return $this
*/
public function setFields(array $fields) {
foreach ($fields as $key => $value) {
if (!isset($value['name']) && is_string($key)) {
$value['name'] = $key;
}
if (empty($value['label'])) {
$value['label'] = $value['name'];
}
$field = new PatternDefinitionField($value['name'], $value['label']);
if (isset($value['type'])) {
$field->setType($value['type']);
}
if (isset($value['description'])) {
$field->setDescription($value['description']);
}
if (isset($value['preview'])) {
$field->setPreview($value['preview']);
}
$this->fields[$value['name']] = $field;
foreach ($fields as $name => $value) {
$field = new PatternDefinitionField($name, $value);
$this->fields[$field->getName()] = $field;
}
return $this;
}
......
......@@ -9,19 +9,33 @@ namespace Drupal\ui_patterns\Definition;
*/
class PatternDefinitionField implements \ArrayAccess {
private $name;
private $label;
private $description = NULL;
private $type = NULL;
private $preview = NULL;
private $escape = TRUE;
/**
* Default field values.
*
* @var array
*/
protected $values = [
'name' => NULL,
'label' => NULL,
'description' => NULL,
'type' => NULL,
'preview' => NULL,
'escape' => TRUE,
];
/**
* PatternDefinitionField constructor.
*/
public function __construct($name, $label) {
$this->name = $name;
$this->label = $label;
public function __construct($name, $value) {
if (is_scalar($value)) {
$this->values['name'] = is_numeric($name) ? $value : $name;
$this->values['label'] = $value;
}
else {
$this->values['name'] = !isset($value['name']) ? $name : $value['name'];
$this->values['label'] = $value['label'];
$this->values = $value + $this->values;
}
}
/**
......@@ -31,7 +45,7 @@ class PatternDefinitionField implements \ArrayAccess {
* Property value.
*/
public function getName() {
return $this->name;
return $this->values['name'];
}
/**
......@@ -41,7 +55,7 @@ class PatternDefinitionField implements \ArrayAccess {
* Property value.
*/
public function getLabel() {
return $this->label;
return $this->values['label'];
}
/**
......@@ -51,7 +65,7 @@ class PatternDefinitionField implements \ArrayAccess {
* Property value.
*/
public function getDescription() {
return $this->description;
return $this->values['description'];
}
/**
......@@ -63,7 +77,7 @@ class PatternDefinitionField implements \ArrayAccess {
* @return $this
*/
public function setDescription($description) {
$this->description = $description;
$this->values['description'] = $description;
return $this;
}
......@@ -74,7 +88,7 @@ class PatternDefinitionField implements \ArrayAccess {
* Property value.
*/
public function getType() {
return $this->type;
return $this->values['type'];
}
/**
......@@ -86,7 +100,7 @@ class PatternDefinitionField implements \ArrayAccess {
* @return $this
*/
public function setType($type) {
$this->type = $type;
$this->values['type'] = $type;
return $this;
}
......@@ -97,7 +111,7 @@ class PatternDefinitionField implements \ArrayAccess {
* Property value.
*/
public function getPreview() {
return $this->preview;
return $this->values['preview'];
}
/**
......@@ -109,7 +123,7 @@ class PatternDefinitionField implements \ArrayAccess {
* @return $this
*/
public function setPreview($preview) {
$this->preview = $preview;
$this->values['preview'] = $preview;
return $this;
}
......@@ -120,7 +134,7 @@ class PatternDefinitionField implements \ArrayAccess {
* Property value.
*/
public function getEscape() {
return $this->escape;
return $this->values['escape'];
}
/**
......@@ -132,7 +146,7 @@ class PatternDefinitionField implements \ArrayAccess {
* @return $this
*/
public function setEscape($escape) {
$this->escape = $escape;
$this->values['escape'] = $escape;
return $this;
}
......@@ -140,21 +154,21 @@ class PatternDefinitionField implements \ArrayAccess {
* {@inheritdoc}
*/
public function offsetExists($offset) {
return property_exists($this, $offset);
return array_key_exists($offset, $this->values);
}
/**
* {@inheritdoc}
*/
public function offsetGet($offset) {
return isset($this->{$offset}) ? $this->{$offset} : NULL;
return isset($this->values[$offset]) ? $this->values[$offset] : NULL;
}
/**
* {@inheritdoc}
*/
public function offsetSet($offset, $value) {
$this->{$offset} = $value;
$this->values[$offset] = $value;
}
/**
......@@ -170,14 +184,7 @@ class PatternDefinitionField implements \ArrayAccess {
* Array definition.
*/
public function toArray() {
return [
'name' => $this->getName(),
'label' => $this->getLabel(),
'description' => $this->getDescription(),
'type' => $this->getType(),
'preview' => $this->getPreview(),
'escape' => $this->getEscape(),
];
return $this->values;
}
}
......@@ -4,6 +4,7 @@ namespace Drupal\Tests\ui_patterns\Unit\Definition;
use function bovigo\assert\assert;
use function bovigo\assert\predicate\equals;
use Drupal\Component\Serialization\Yaml;
use Drupal\Tests\ui_patterns\Unit\AbstractUiPatternsTest;
use Drupal\ui_patterns\Definition\PatternDefinition;
......@@ -53,10 +54,31 @@ class PatternDefinitionTest extends AbstractUiPatternsTest {
}
/**
* Return validation data.
* Test fields processing.
*
* @dataProvider fieldsProcessingProvider
*/
public function testFieldsProcessing($actual, $expected) {
$pattern_definition = new PatternDefinition();
$data = $pattern_definition->setFields($actual)->toArray();
assert($data['fields'], equals($expected));
}
/**
* Provider.
*
* @return array
* Data.
*/
public function fieldsProcessingProvider() {
return Yaml::decode(file_get_contents($this->getFixturePath() . '/definition/fields_processing.yml'));
}
/**
* Provider.
*
* @return array
* Pattern validation data.
* Data.
*/
public function definitionGettersProvider() {
return [
......
-
actual:
- field1
- field2
expected:
field1:
name: field1
label: field1
description: ~
type: ~
preview: ~
escape: TRUE
field2:
name: field2
label: field2
description: ~
type: ~
preview: ~
escape: TRUE
-
actual:
field1: Field 1
field2: Field 2
expected:
field1:
name: field1
label: Field 1
description: ~
type: ~
preview: ~
escape: TRUE
field2:
name: field2
label: Field 2
description: ~
type: ~
preview: ~
escape: TRUE
-
actual:
field1:
label: field1
expected:
field1:
name: field1
label: field1
description: ~
type: ~
preview: ~
escape: TRUE
-
actual:
-
name: field1
label: Field 1
expected:
field1:
name: field1
label: Field 1
description: ~
type: ~
preview: ~
escape: TRUE
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment