diff --git a/README.md b/README.md index 013a777..6369f32 100644 --- a/README.md +++ b/README.md @@ -138,6 +138,12 @@ enum BackedEnum: int The above enum defines 3 meta for each case: `color`, `shape` and `isOdd`. The `#[Meta]` attributes are ideal to declare static information, whilst public non-static methods are ideal to declare dynamic information. +To access a case meta, we can simply call the method having the same name of the wanted meta: + +```php +BackedEnum::Two->color(); // green +``` + `#[Meta]` attributes can also be attached to the enum itself to provide default values when a case does not declare its own meta values: ```php diff --git a/src/CasesCollection.php b/src/CasesCollection.php index c74686c..a7a0e28 100644 --- a/src/CasesCollection.php +++ b/src/CasesCollection.php @@ -112,10 +112,10 @@ public function toArray(): array /** * Retrieve the first case. * - * @param (callable(TValue, array-key): bool)|null $callback + * @param ?callable(TValue, array-key): bool $callback * @return ?TValue */ - public function first(callable|null $callback = null): mixed + public function first(?callable $callback = null): mixed { $callback ??= fn() => true; diff --git a/src/Concerns/CollectsCases.php b/src/Concerns/CollectsCases.php index 8e1e9aa..9944313 100644 --- a/src/Concerns/CollectsCases.php +++ b/src/Concerns/CollectsCases.php @@ -30,9 +30,9 @@ public static function count(): int /** * Retrieve the first case. * - * @param (callable(self, array-key): bool)|null $callback + * @param ?callable(self, array-key): bool $callback */ - public static function first(callable|null $callback = null): ?self + public static function first(?callable $callback = null): ?self { return self::collect()->first($callback); } diff --git a/src/Concerns/SelfAware.php b/src/Concerns/SelfAware.php index 2527f22..9953132 100644 --- a/src/Concerns/SelfAware.php +++ b/src/Concerns/SelfAware.php @@ -147,7 +147,7 @@ public function resolveMetaAttribute(string $meta): mixed } } - throw new ValueError(sprintf('"%s" is not a valid meta for enum "%s"', $meta, self::class)); + throw new ValueError(sprintf('The case %s::%s has no "%s" meta set', self::class, $this->name, $meta)); } /** diff --git a/tests/BackedEnumTest.php b/tests/BackedEnumTest.php index e880fe8..67e5b17 100644 --- a/tests/BackedEnumTest.php +++ b/tests/BackedEnumTest.php @@ -394,7 +394,7 @@ }); it('handles the call to an inaccessible case method', fn() => BackedEnum::one->unknownMethod()) - ->throws(Error::class, '"unknownMethod" is not a valid meta for enum "Cerbero\Enum\BackedEnum"'); + ->throws(Error::class, 'The case Cerbero\Enum\BackedEnum::one has no "unknownMethod" meta set'); it('runs custom logic when calling an inaccessible case method', function() { Enums::onCall(function(object $case, string $name, array $arguments) { @@ -450,7 +450,7 @@ ->toBe('red'); it('throws a value error when attempting to retrieve an invalid item', fn() => BackedEnum::one->resolveItem('invalid')) - ->throws(ValueError::class, '"invalid" is not a valid meta for enum "Cerbero\Enum\BackedEnum"'); + ->throws(ValueError::class, 'The case Cerbero\Enum\BackedEnum::one has no "invalid" meta set'); it('retrieves the value of a backed case or the name of a pure case', function() { expect(BackedEnum::one->value())->toBe(1); diff --git a/tests/PureEnumTest.php b/tests/PureEnumTest.php index f6b9d9c..0ecd1da 100644 --- a/tests/PureEnumTest.php +++ b/tests/PureEnumTest.php @@ -403,7 +403,7 @@ }); it('handles the call to an inaccessible case method', fn() => PureEnum::one->unknownMethod()) - ->throws(Error::class, '"unknownMethod" is not a valid meta for enum "Cerbero\Enum\PureEnum"'); + ->throws(Error::class, 'The case Cerbero\Enum\PureEnum::one has no "unknownMethod" meta set'); it('runs custom logic when calling an inaccessible case method', function() { Enums::onCall(function(object $case, string $name, array $arguments) { @@ -458,7 +458,7 @@ ->toBe('red'); it('throws a value error when attempting to retrieve an invalid item', fn() => PureEnum::one->resolveItem('invalid')) - ->throws(ValueError::class, '"invalid" is not a valid meta for enum "Cerbero\Enum\PureEnum"'); + ->throws(ValueError::class, 'The case Cerbero\Enum\PureEnum::one has no "invalid" meta set'); it('retrieves the value of a backed case or the name of a pure case', function() { expect(PureEnum::one->value())->toBe('one');