Merge default options into user options

This commit is contained in:
2023-06-27 10:32:08 +01:00
parent 6cf1deb136
commit abfff194f5

View File

@@ -10,19 +10,16 @@ use Twig\Extension\RuntimeExtensionInterface;
final class IconRuntime implements RuntimeExtensionInterface
{
public const DEFAULT_SIZE = 32;
public const DEFAULT_COLOUR = 'primary';
private const DEFAULT_OPTIONS = [
private const OPTIONS = [
'icon' => null,
'title' => null,
'size' => self::DEFAULT_SIZE,
'colour' => self::DEFAULT_COLOUR,
'size' => null,
'colour' => null,
'hover' => null,
'classes' => [],
];
public function __construct(private array $directories, private array $colours)
public function __construct(private array $defaultOptions, private array $directories, private array $colours)
{}
/**
@@ -76,13 +73,17 @@ final class IconRuntime implements RuntimeExtensionInterface
private function mergeUserOptionsWithDefaults(array $userOptions): array
{
return array_merge(self::DEFAULT_OPTIONS, $userOptions);
$options = self::OPTIONS;
$options['size'] = $this->defaultOptions['size'];
$options['colour'] = $this->defaultOptions['colour'];
return array_merge($options, $userOptions);
}
private function throwIfUnrecognisedOptionExists(array $options): void
{
foreach (array_keys($options) as $key) {
if (!key_exists($key, self::DEFAULT_OPTIONS)) {
if (!key_exists($key, self::OPTIONS)) {
throw new \InvalidArgumentException("Unrecognised option '{$key}'!");
}
}