1
0
Fork 0
mirror of https://github.com/archtechx/enums.git synced 2025-12-12 16:54:03 +00:00

feat: Add support for default values on metadata properties

refactor: Remove comment
This commit is contained in:
Owen Conti 2024-07-15 07:43:49 -06:00
parent a99ee1a7e0
commit bcdbd85d74
4 changed files with 45 additions and 2 deletions

View file

@ -12,6 +12,11 @@ abstract class MetaProperty
$this->value = $this->transform($value); $this->value = $this->transform($value);
} }
public static function defaultValue(): mixed
{
return null;
}
public static function make(mixed $value): static public static function make(mixed $value): static
{ {
return new static($value); return new static($value);

View file

@ -73,6 +73,6 @@ class Reflection
return $properties[0]->value; return $properties[0]->value;
} }
return null; return $metaProperty::defaultValue() ?? null;
} }
} }

View file

@ -29,6 +29,17 @@ class Instructions extends MetaProperty
} }
} }
#[Attribute]
class IsActive extends MetaProperty
{
public static string $method = 'isActive';
public static function defaultValue(): mixed
{
return false;
}
}
/** /**
* @method string description() * @method string description()
* @method string color() * @method string color()
@ -62,6 +73,25 @@ enum Role
case GUEST; case GUEST;
} }
#[Meta([IsActive::class])]
enum ReferenceType: int
{
use InvokableCases, Options, Names, Values, From, Metadata, Comparable;
#[IsActive(true)]
case ACTIVE_TYPE = 1;
case INACTIVE_TYPE = 0;
}
#[Meta([Desc::class])]
enum RoleWithoutAttribute
{
use InvokableCases, Options, Names, Values, From, Metadata, Comparable;
case ADMIN;
}
enum MultiWordSnakeCaseEnum enum MultiWordSnakeCaseEnum
{ {
use Options; use Options;

View file

@ -60,4 +60,12 @@ test('fromMeta throws an exception when the enum cannot be instantiated', functi
test('tryFromMeta silently fails when the enum cannot be instantiated') test('tryFromMeta silently fails when the enum cannot be instantiated')
->expect(Role::tryFromMeta(Color::make('foobar'))) ->expect(Role::tryFromMeta(Color::make('foobar')))
->toBe(null); ->toBeNull();
test('metadata properties return null if missing on the case')
->expect(RoleWithoutAttribute::ADMIN->desc())
->toBeNull();
test('metadata can have default values')
->expect(ReferenceType::INACTIVE_TYPE->isActive())
->toBeFalse();