Make ArrayType and RecordType simpler

Signed-off-by: David Arendsen <darendsen@gamepoint.com>
This commit is contained in:
David Arendsen 2023-03-10 20:54:18 +01:00
commit fa99c1f393
4 changed files with 28 additions and 46 deletions

View file

@ -2,6 +2,7 @@
namespace Arendsen\FluxQueryBuilder;
use Arendsen\FluxQueryBuilder\Type\TypeInterface;
use Arendsen\FluxQueryBuilder\Type\ArrayType;
use Arendsen\FluxQueryBuilder\Type\BooleanType;
use Arendsen\FluxQueryBuilder\Type\TimeType;
@ -14,15 +15,9 @@ class Type
*/
protected $value;
/**
* @var Settings|null $settings
*/
protected $settings;
public function __construct($value, Settings $settings = null)
public function __construct($value)
{
$this->value = $value;
$this->settings = $settings ? $settings : Settings::set([]);
}
public function __toString(): string
@ -38,7 +33,7 @@ class Type
case 'boolean':
return new BooleanType($this->value);
case 'array':
return new ArrayType($this->value, $this->settings);
return new ArrayType($this->value);
case 'NULL':
return 'null';
default:

View file

@ -7,43 +7,27 @@ use Arendsen\FluxQueryBuilder\Type;
class ArrayType implements TypeInterface
{
public const SETTING_IS_NESTED_ARRAY = 'isNestedArray';
/**
* @var array $value
*/
protected $value;
/**
* @var Settings|null $settings
*/
protected $settings;
public function __construct(array $value, Settings $settings = null)
public function __construct(array $value)
{
$this->value = $value;
$this->settings = $settings ? $settings : Settings::set([]);
}
public function __toString(): string
{
if ($this->settings->get(RecordType::SETTING_IS_RECORD)) {
return new RecordType($this->value);
}
array_walk($this->value, function (&$value, $key) {
if ($this->isAssociativeArray($key)) {
$value = $key . ': ' . new Type($value, Settings::set([
self::SETTING_IS_NESTED_ARRAY => is_array($value)
]));
$value = $key . ': ' . $this->getPrefix($value) . new Type($value) . $this->getSuffix($value);
} else {
$value = new Type($value, Settings::set([
self::SETTING_IS_NESTED_ARRAY => is_array($value)
]));
$value = $this->getPrefix($value) . new Type($value) . $this->getSuffix($value);
}
});
return $this->getPrefix() . implode(', ', $this->value) . $this->getSuffix();
return implode(', ', $this->value);
}
protected function isAssociativeArray($key): bool
@ -51,18 +35,13 @@ class ArrayType implements TypeInterface
return is_string($key);
}
protected function isNestedArray(): bool
protected function getPrefix($value): string
{
return $this->settings->get(self::SETTING_IS_NESTED_ARRAY) ? true : false;
return is_array($value) ? '[' : '';
}
protected function getPrefix(): string
protected function getSuffix($value): string
{
return $this->isNestedArray() ? '[' : '';
}
protected function getSuffix(): string
{
return $this->isNestedArray() ? ']' : '';
return is_array($value) ? ']' : '';
}
}

View file

@ -9,6 +9,11 @@ class FieldRecordType implements TypeInterface
{
public const SETTING_IS_RECORD = 'isRecord';
/**
* @var array $value
*/
private $value;
public function __construct(array $value)
{
$this->value = $value;

View file

@ -2,12 +2,14 @@
namespace Arendsen\FluxQueryBuilder\Type;
use Arendsen\FluxQueryBuilder\Settings;
use Arendsen\FluxQueryBuilder\Type;
class RecordType implements TypeInterface
{
public const SETTING_IS_RECORD = 'isRecord';
/**
* @var array $value
*/
private $value;
public function __construct(array $value)
{
@ -17,17 +19,18 @@ class RecordType implements TypeInterface
public function __toString(): string
{
array_walk($this->value, function (&$value, $key) {
if (is_string($key)) {
$value = $key . ': ' . new Type($value, Settings::set([
self::SETTING_IS_RECORD => true,
]));
if (is_array($value)) {
$value = $this->getPrefix($key) . new RecordType($value);
} else {
$value = new Type($value, Settings::set([
self::SETTING_IS_RECORD => true,
]));
$value = $this->getPrefix($key) . new Type($value);
}
});
return '{' . implode(', ', $this->value) . '}';
}
private function getPrefix($key): string
{
return is_string($key) ? $key . ': ' : '';
}
}