Throw exception if option is not recognised
This commit is contained in:
@@ -4,7 +4,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Pcm\IconBundle\Twig\Functions;
|
namespace Pcm\IconBundle\Twig\Functions;
|
||||||
|
|
||||||
use InvalidArgumentException;
|
|
||||||
use Twig\Extension\AbstractExtension;
|
use Twig\Extension\AbstractExtension;
|
||||||
use Twig\TwigFunction;
|
use Twig\TwigFunction;
|
||||||
|
|
||||||
@@ -23,7 +22,7 @@ final class IconExtension extends AbstractExtension
|
|||||||
public function __construct(private array $directories, private array $palletes)
|
public function __construct(private array $directories, private array $palletes)
|
||||||
{
|
{
|
||||||
if (empty($this->directories))
|
if (empty($this->directories))
|
||||||
throw new InvalidArgumentException('Directories array must contain at least one path!');
|
throw new \InvalidArgumentException('Directories array must contain at least one path!');
|
||||||
|
|
||||||
$dirsContainNonString = array_reduce($this->directories,
|
$dirsContainNonString = array_reduce($this->directories,
|
||||||
fn($notString, $path) => $notString || !is_string($path));
|
fn($notString, $path) => $notString || !is_string($path));
|
||||||
@@ -32,7 +31,7 @@ final class IconExtension extends AbstractExtension
|
|||||||
throw new \TypeError('Directories array must only contain strings!');
|
throw new \TypeError('Directories array must only contain strings!');
|
||||||
|
|
||||||
if (empty($this->palletes))
|
if (empty($this->palletes))
|
||||||
throw new InvalidArgumentException('Palletes array must contain at least one pallet!');
|
throw new \InvalidArgumentException('Palletes array must contain at least one pallet!');
|
||||||
|
|
||||||
$pelletesContainNonarray = array_reduce($this->palletes,
|
$pelletesContainNonarray = array_reduce($this->palletes,
|
||||||
fn($notArray, $path) => $notArray || !is_array($path));
|
fn($notArray, $path) => $notArray || !is_array($path));
|
||||||
@@ -82,13 +81,14 @@ final class IconExtension extends AbstractExtension
|
|||||||
{
|
{
|
||||||
$options = $this->mergeUserOptionsWithDefaults($userOptions);
|
$options = $this->mergeUserOptionsWithDefaults($userOptions);
|
||||||
|
|
||||||
|
$this->throwIfUnrecognisedOptionExists($options);
|
||||||
|
|
||||||
$iconFilepath = $this->findSvgFilepath($options['icon']);
|
$iconFilepath = $this->findSvgFilepath($options['icon']);
|
||||||
$rawSvgMarkup = $this->getSvgMarkup($iconFilepath);
|
$rawSvgMarkup = $this->getSvgMarkup($iconFilepath);
|
||||||
$cleanSvgMarkup = $this->cleanSvgMarkup($rawSvgMarkup);
|
$cleanSvgMarkup = $this->cleanSvgMarkup($rawSvgMarkup);
|
||||||
|
|
||||||
$mainPallete = $this->getPallete($options['colour']);
|
$mainPallete = $this->getPallete($options['colour']);
|
||||||
|
|
||||||
|
|
||||||
$colourClasses = "{$mainPallete['stroke']} {$mainPallete['fill']}";
|
$colourClasses = "{$mainPallete['stroke']} {$mainPallete['fill']}";
|
||||||
|
|
||||||
if (null !== $options['hover']) {
|
if (null !== $options['hover']) {
|
||||||
@@ -121,6 +121,14 @@ final class IconExtension extends AbstractExtension
|
|||||||
return array_merge(self::DEFAULT_OPTIONS, $userOptions);
|
return array_merge(self::DEFAULT_OPTIONS, $userOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function throwIfUnrecognisedOptionExists(array $options): void
|
||||||
|
{
|
||||||
|
foreach (array_keys($options) as $key) {
|
||||||
|
if (!key_exists($key, self::DEFAULT_OPTIONS))
|
||||||
|
throw new \InvalidArgumentException("Unrecognised option '{$key}'!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private function findSvgFilepath(string $iconName): string
|
private function findSvgFilepath(string $iconName): string
|
||||||
{
|
{
|
||||||
foreach ($this->directories as $directory) {
|
foreach ($this->directories as $directory) {
|
||||||
|
|||||||
@@ -299,4 +299,11 @@ class IconExtensionTest extends TestCase
|
|||||||
$this->assertMatchesRegularExpression('/<svg.+class=".*group-hover:fill-white.*".*>/', $contents);
|
$this->assertMatchesRegularExpression('/<svg.+class=".*group-hover:fill-white.*".*>/', $contents);
|
||||||
$this->assertMatchesRegularExpression('/<svg.+class=".*group-hover:stroke-white.*".*>/', $contents);
|
$this->assertMatchesRegularExpression('/<svg.+class=".*group-hover:stroke-white.*".*>/', $contents);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testThrowsIfInvalidOptionPassed(): void
|
||||||
|
{
|
||||||
|
$this->expectException(\InvalidArgumentException::class);
|
||||||
|
$this->icon->renderIcon(['icon' => self::ICON, 'fake-key-should-throw' => null]);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user