mirror of
https://github.com/archtechx/enums.git
synced 2025-12-12 12:34:04 +00:00
feat: Add support for default values on metadata properties
refactor: Remove comment
This commit is contained in:
parent
a99ee1a7e0
commit
bcdbd85d74
4 changed files with 45 additions and 2 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,6 @@ class Reflection
|
||||||
return $properties[0]->value;
|
return $properties[0]->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return $metaProperty::defaultValue() ?? null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue