mirror of
https://github.com/danog/Valinor.git
synced 2024-11-26 20:24:40 +01:00
feat: introduce method to get parameter by index
This commit is contained in:
parent
d6e778aff7
commit
380961247e
22
src/Definition/Exception/InvalidParameterIndex.php
Normal file
22
src/Definition/Exception/InvalidParameterIndex.php
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CuyZ\Valinor\Definition\Exception;
|
||||||
|
|
||||||
|
use CuyZ\Valinor\Definition\Parameters;
|
||||||
|
use LogicException;
|
||||||
|
|
||||||
|
/** @internal */
|
||||||
|
final class InvalidParameterIndex extends LogicException
|
||||||
|
{
|
||||||
|
public function __construct(int $index, Parameters $parameters)
|
||||||
|
{
|
||||||
|
$max = $parameters->count() - 1;
|
||||||
|
|
||||||
|
parent::__construct(
|
||||||
|
"Index $index is out of range, it should be between 0 and $max.",
|
||||||
|
1644936619
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -5,10 +5,13 @@ declare(strict_types=1);
|
|||||||
namespace CuyZ\Valinor\Definition;
|
namespace CuyZ\Valinor\Definition;
|
||||||
|
|
||||||
use Countable;
|
use Countable;
|
||||||
|
use CuyZ\Valinor\Definition\Exception\InvalidParameterIndex;
|
||||||
use CuyZ\Valinor\Definition\Exception\ParameterNotFound;
|
use CuyZ\Valinor\Definition\Exception\ParameterNotFound;
|
||||||
use IteratorAggregate;
|
use IteratorAggregate;
|
||||||
use Traversable;
|
use Traversable;
|
||||||
|
|
||||||
|
use function array_values;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @api
|
* @api
|
||||||
*
|
*
|
||||||
@ -40,6 +43,18 @@ final class Parameters implements IteratorAggregate, Countable
|
|||||||
return $this->parameters[$name];
|
return $this->parameters[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int<0, max> $index
|
||||||
|
*/
|
||||||
|
public function at(int $index): ParameterDefinition
|
||||||
|
{
|
||||||
|
if ($index >= $this->count()) {
|
||||||
|
throw new InvalidParameterIndex($index, $this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array_values($this->parameters)[$index];
|
||||||
|
}
|
||||||
|
|
||||||
public function count(): int
|
public function count(): int
|
||||||
{
|
{
|
||||||
return count($this->parameters);
|
return count($this->parameters);
|
||||||
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace CuyZ\Valinor\Tests\Unit\Definition;
|
namespace CuyZ\Valinor\Tests\Unit\Definition;
|
||||||
|
|
||||||
|
use CuyZ\Valinor\Definition\Exception\InvalidParameterIndex;
|
||||||
use CuyZ\Valinor\Definition\Exception\ParameterNotFound;
|
use CuyZ\Valinor\Definition\Exception\ParameterNotFound;
|
||||||
use CuyZ\Valinor\Definition\Parameters;
|
use CuyZ\Valinor\Definition\Parameters;
|
||||||
use CuyZ\Valinor\Tests\Fake\Definition\FakeParameterDefinition;
|
use CuyZ\Valinor\Tests\Fake\Definition\FakeParameterDefinition;
|
||||||
@ -36,6 +37,25 @@ final class ParametersTest extends TestCase
|
|||||||
(new Parameters())->get('unknownParameter');
|
(new Parameters())->get('unknownParameter');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_get_parameter_at_index_returns_correct_parameter(): void
|
||||||
|
{
|
||||||
|
$parameterA = FakeParameterDefinition::new('SomeParameterA');
|
||||||
|
$parameterB = FakeParameterDefinition::new('SomeParameterB');
|
||||||
|
$parameters = new Parameters($parameterA, $parameterB);
|
||||||
|
|
||||||
|
self::assertSame($parameterA, $parameters->at(0));
|
||||||
|
self::assertSame($parameterB, $parameters->at(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_get_parameter_at_index_out_of_range_throws_exception(): void
|
||||||
|
{
|
||||||
|
$this->expectException(InvalidParameterIndex::class);
|
||||||
|
$this->expectExceptionCode(1644936619);
|
||||||
|
$this->expectExceptionMessage('Index 1 is out of range, it should be between 0 and 0.');
|
||||||
|
|
||||||
|
(new Parameters(FakeParameterDefinition::new()))->at(1);
|
||||||
|
}
|
||||||
|
|
||||||
public function test_parameters_are_countable(): void
|
public function test_parameters_are_countable(): void
|
||||||
{
|
{
|
||||||
$parameters = new Parameters(
|
$parameters = new Parameters(
|
||||||
|
Loading…
Reference in New Issue
Block a user