Compare commits

..

No commits in common. "master" and "1.0.0" have entirely different histories.

4 changed files with 32 additions and 61 deletions

1
.gitignore vendored
View file

@ -5,7 +5,6 @@
/public/storage /public/storage
/storage/*.key /storage/*.key
/vendor /vendor
bin
.env .env
.env.backup .env.backup
.phpunit.result.cache .phpunit.result.cache

View file

@ -7,7 +7,7 @@ This library adds a few useful traits to your PHP Enums that compliment existing
For example, For example,
```php ```php
use vlw\xEnum; use \victorwesterlund\xEnum;
enum HelloWorld: string { enum HelloWorld: string {
use xEnum; use xEnum;
@ -16,34 +16,12 @@ enum HelloWorld: string {
case BAZ = "QUX"; case BAZ = "QUX";
} }
// Like Enum::from() but for Enum names instead of values // Like Enum::tryFrom() but for Enum names instead of values
HelloWorld::fromName("FOO"); // HelloWorld::FOO HelloWorld::fromName("FOO"); //
// And of course the non-throwing version similar to Enum::tryFrom() // .. and of course the non-throwing version
HelloWorld::tryFromName("MOM"); // null HelloWorld::tryFromName("MOM"); // null
``` ```
# How to use
Requires PHP 8.0 or newer
1. **Install from composer**
```
composer require vlw/xenum
```
2. **`use` in your project**
```php
use vlw\xEnum;
```
3. **`use` with your Enums**
```php
enum HelloWorld {
use xEnum;
}
```
# Methods # Methods
All methods implemented by this library All methods implemented by this library
@ -54,7 +32,6 @@ Method
[Enum::tryFromName(int\|string\|null): static\|null](#enumtryfromname) [Enum::tryFromName(int\|string\|null): static\|null](#enumtryfromname)
[Enum::names(): array](#enumnames) [Enum::names(): array](#enumnames)
[Enum::values(): array](#enumvalues) [Enum::values(): array](#enumvalues)
[Enum::entries(): array](#enumentries)
## Enum::fromName() ## Enum::fromName()
@ -76,7 +53,7 @@ enum HelloWorld: string {
case BAZ = "QUX"; case BAZ = "QUX";
} }
HelloWorld::fromName("FOO"); // HelloWorld::FOO HelloWorld::fromName("BAR"); // HelloWorld::FOO
HelloWorld::fromName("MOM") // ValueError: 'MOM' is not a valid case for HelloWorld HelloWorld::fromName("MOM") // ValueError: 'MOM' is not a valid case for HelloWorld
``` ```
@ -100,7 +77,7 @@ enum HelloWorld: string {
case BAZ = "QUX"; case BAZ = "QUX";
} }
HelloWorld::tryFromName("FOO"); // HelloWorld::FOO HelloWorld::tryFromName("BAR"); // HelloWorld::FOO
HelloWorld::tryFromName("MOM") // null HelloWorld::tryFromName("MOM") // null
``` ```
@ -130,7 +107,7 @@ HelloWorld::names(); // ["FOO", "BAZ"]
Return sequential array of Enum case values Return sequential array of Enum case values
```php ```php
Enum::entries(): array Enum::values(): array
``` ```
Example: Example:
@ -146,23 +123,23 @@ enum HelloWorld: string {
HelloWorld::values(); // ["BAR", "QUX"] HelloWorld::values(); // ["BAR", "QUX"]
``` ```
## Enum::entries() # How to use
Return an associative array of Enum names and values. This method is similar to [JavaScript's Object.entries()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) Requires PHP 8.0 or newer
```php 1. **Install from composer**
Enum::entries(): array ```
composer require victorwesterlund/xenum
``` ```
Example: 2. **`use` in your project**
```php ```php
enum HelloWorld: string { use \victorwesterlund\xEnum;
```
3. **`use` with your Enums**
```php
enum HelloWorld {
use xEnum; use xEnum;
case FOO = "BAR";
case BAZ = "QUX";
} }
HelloWorld::entries(); // ["FOO" => "BAR", "BAZ" => "QUX"]
``` ```

View file

@ -1,18 +1,18 @@
{ {
"name": "vlw/xenum", "name": "victorwesterlund/xenum",
"description": "PHP eXtended Enums. The missing quality-of-life features from PHP 8+ Enums", "description": "PHP eXtended Enums. The missing quality-of-life features from PHP 8+ Enums",
"type": "library", "type": "library",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"authors": [ "authors": [
{ {
"name": "Victor Westerlund", "name": "Victor Westerlund",
"email": "victor@vlw.se" "email": "victor.vesterlund@gmail.com"
} }
], ],
"minimum-stability": "dev", "minimum-stability": "dev",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"vlw\\": "src/" "victorwesterlund\\": "src/"
} }
}, },
"require": {} "require": {}

View file

@ -1,15 +1,15 @@
<?php <?php
namespace vlw; namespace victorwesterlund;
/* /*
PHP eXtended Enums. PHP eXtended Enums.
The missing quality-of-life features from PHP 8+ Enums. The missing quality-of-life features from PHP 8+ Enums.
https://codeberg.org/vlw/php-xenum https://github.com/victorwesterlund/php-xenum
*/ */
trait xEnum { trait xEnum {
// Resolve enum case from enum name or return null // Resolve enum case from enum name or return null
public static function tryFromName(?string $name): ?static { public static function tryFromName(string|null $name): static|null {
foreach (self::cases() as $case) { foreach (self::cases() as $case) {
if (strtoupper($name) === $case->name) { if (strtoupper($name) === $case->name) {
return $case; return $case;
@ -21,9 +21,9 @@
} }
// Throw a ValueError if Enum name is not found // Throw a ValueError if Enum name is not found
public static function fromName(?string $name): static { public static function fromName(string|null $name): static {
$case = self::tryFromName($name); $case = self::tryFromName($name);
return $case ? $case : throw new \ValueError("'{$name}' is not a valid case for enum " . self::class); return $case ? $case : throw new ValueError("'${name}' is not a valid case for enum " . self::class);
} }
// Return array of enum names // Return array of enum names
@ -35,9 +35,4 @@
public static function values(): array { public static function values(): array {
return array_column(self::cases(), "value"); return array_column(self::cases(), "value");
} }
// Return assoc array of enum names and values
public static function entries(): array {
return array_combine(self::names(), self::values());
}
} }