Skip to content

Commit

Permalink
[11.x] Add Illuminate\Support\enum_value to resolve BackedEnum or…
Browse files Browse the repository at this point in the history
… `UnitEnum` to scalar (#53096)

* [11.x] Add `Illuminate\Support\mutate` to resolve `BackedEnum` or
`UnitEnum` to scalar.

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* Apply fixes from StyleCI

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* Apply fixes from StyleCI

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* Apply fixes from StyleCI

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

* wip

* Apply fixes from StyleCI

* rename to scalar value

* rename again

---------

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
Co-authored-by: Taylor Otwell <taylor@laravel.com>
  • Loading branch information
3 people authored Oct 11, 2024
1 parent 05b184c commit a236107
Show file tree
Hide file tree
Showing 21 changed files with 133 additions and 103 deletions.
9 changes: 4 additions & 5 deletions src/Illuminate/Auth/Access/Gate.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Illuminate\Auth\Access;

use BackedEnum;
use Closure;
use Exception;
use Illuminate\Auth\Access\Events\GateEvaluated;
Expand All @@ -16,6 +15,8 @@
use ReflectionClass;
use ReflectionFunction;

use function Illuminate\Support\enum_value;

class Gate implements GateContract
{
use HandlesAuthorization;
Expand Down Expand Up @@ -200,7 +201,7 @@ protected function authorizeOnDemand($condition, $message, $code, $allowWhenResp
*/
public function define($ability, $callback)
{
$ability = $ability instanceof BackedEnum ? $ability->value : $ability;
$ability = enum_value($ability);

if (is_array($callback) && isset($callback[0]) && is_string($callback[0])) {
$callback = $callback[0].'@'.$callback[1];
Expand Down Expand Up @@ -405,10 +406,8 @@ public function authorize($ability, $arguments = [])
*/
public function inspect($ability, $arguments = [])
{
$ability = $ability instanceof BackedEnum ? $ability->value : $ability;

try {
$result = $this->raw($ability, $arguments);
$result = $this->raw(enum_value($ability), $arguments);

if ($result instanceof Response) {
return $result;
Expand Down
7 changes: 3 additions & 4 deletions src/Illuminate/Auth/Middleware/Authorize.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

namespace Illuminate\Auth\Middleware;

use BackedEnum;
use Closure;
use Illuminate\Contracts\Auth\Access\Gate;
use Illuminate\Database\Eloquent\Model;

use function Illuminate\Support\enum_value;

class Authorize
{
/**
Expand Down Expand Up @@ -36,9 +37,7 @@ public function __construct(Gate $gate)
*/
public static function using($ability, ...$models)
{
$ability = $ability instanceof BackedEnum ? $ability->value : $ability;

return static::class.':'.implode(',', [$ability, ...$models]);
return static::class.':'.implode(',', [enum_value($ability), ...$models]);
}

/**
Expand Down
19 changes: 6 additions & 13 deletions src/Illuminate/Bus/Queueable.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

namespace Illuminate\Bus;

use BackedEnum;
use Closure;
use Illuminate\Queue\CallQueuedClosure;
use Illuminate\Support\Arr;
use PHPUnit\Framework\Assert as PHPUnit;
use RuntimeException;

use function Illuminate\Support\enum_value;

trait Queueable
{
/**
Expand Down Expand Up @@ -82,9 +83,7 @@ trait Queueable
*/
public function onConnection($connection)
{
$this->connection = $connection instanceof BackedEnum
? $connection->value
: $connection;
$this->connection = enum_value($connection);

return $this;
}
Expand All @@ -97,9 +96,7 @@ public function onConnection($connection)
*/
public function onQueue($queue)
{
$this->queue = $queue instanceof BackedEnum
? $queue->value
: $queue;
$this->queue = enum_value($queue);

return $this;
}
Expand All @@ -112,9 +109,7 @@ public function onQueue($queue)
*/
public function allOnConnection($connection)
{
$resolvedConnection = $connection instanceof BackedEnum
? $connection->value
: $connection;
$resolvedConnection = enum_value($connection);

$this->chainConnection = $resolvedConnection;
$this->connection = $resolvedConnection;
Expand All @@ -130,9 +125,7 @@ public function allOnConnection($connection)
*/
public function allOnQueue($queue)
{
$resolvedQueue = $queue instanceof BackedEnum
? $queue->value
: $queue;
$resolvedQueue = enum_value($queue);

$this->chainQueue = $resolvedQueue;
$this->queue = $resolvedQueue;
Expand Down
10 changes: 3 additions & 7 deletions src/Illuminate/Cache/RateLimiter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

namespace Illuminate\Cache;

use BackedEnum;
use Closure;
use Illuminate\Contracts\Cache\Repository as Cache;
use Illuminate\Support\InteractsWithTime;
use UnitEnum;

use function Illuminate\Support\enum_value;

class RateLimiter
{
Expand Down Expand Up @@ -263,10 +263,6 @@ public function cleanRateLimiterKey($key)
*/
private function resolveLimiterName($name): string
{
return match (true) {
$name instanceof BackedEnum => $name->value,
$name instanceof UnitEnum => $name->name,
default => (string) $name,
};
return (string) enum_value($name);
}
}
10 changes: 3 additions & 7 deletions src/Illuminate/Database/Console/ShowModelCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Illuminate\Database\Console;

use BackedEnum;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
Expand All @@ -14,7 +13,8 @@
use SplFileObject;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Output\OutputInterface;
use UnitEnum;

use function Illuminate\Support\enum_value;

#[AsCommand(name: 'model:show')]
class ShowModelCommand extends DatabaseInspectionCommand
Expand Down Expand Up @@ -474,11 +474,7 @@ protected function getColumnDefault($column, $model)
{
$attributeDefault = $model->getAttributes()[$column['name']] ?? null;

return match (true) {
$attributeDefault instanceof BackedEnum => $attributeDefault->value,
$attributeDefault instanceof UnitEnum => $attributeDefault->name,
default => $attributeDefault ?? $column['default'],
};
return enum_value($attributeDefault, $column['default']);
}

/**
Expand Down
4 changes: 3 additions & 1 deletion src/Illuminate/Database/Eloquent/Casts/AsEnumArrayObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Support\Collection;

use function Illuminate\Support\enum_value;

class AsEnumArrayObject implements Castable
{
/**
Expand Down Expand Up @@ -77,7 +79,7 @@ protected function getStorableEnumValue($enum)
return $enum;
}

return $enum instanceof BackedEnum ? $enum->value : $enum->name;
return enum_value($enum);
}
};
}
Expand Down
4 changes: 3 additions & 1 deletion src/Illuminate/Database/Eloquent/Casts/AsEnumCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Support\Collection;

use function Illuminate\Support\enum_value;

class AsEnumCollection implements Castable
{
/**
Expand Down Expand Up @@ -73,7 +75,7 @@ protected function getStorableEnumValue($enum)
return $enum;
}

return $enum instanceof BackedEnum ? $enum->value : $enum->name;
return enum_value($enum);
}
};
}
Expand Down
6 changes: 3 additions & 3 deletions src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
use RuntimeException;
use ValueError;

use function Illuminate\Support\enum_value;

trait HasAttributes
{
/**
Expand Down Expand Up @@ -1253,9 +1255,7 @@ protected function getStorableEnumValue($expectedEnum, $value)
throw new ValueError(sprintf('Value [%s] is not of the expected enum type [%s].', var_export($value, true), $expectedEnum));
}

return $value instanceof BackedEnum
? $value->value
: $value->name;
return enum_value($value);
}

/**
Expand Down
5 changes: 3 additions & 2 deletions src/Illuminate/Database/Eloquent/Relations/BelongsTo.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@

namespace Illuminate\Database\Eloquent\Relations;

use BackedEnum;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Concerns\ComparesRelatedModels;
use Illuminate\Database\Eloquent\Relations\Concerns\InteractsWithDictionary;
use Illuminate\Database\Eloquent\Relations\Concerns\SupportsDefaultModels;

use function Illuminate\Support\enum_value;

/**
* @template TRelatedModel of \Illuminate\Database\Eloquent\Model
* @template TDeclaringModel of \Illuminate\Database\Eloquent\Model
Expand Down Expand Up @@ -367,7 +368,7 @@ protected function getForeignKeyFrom(Model $model)
{
$foreignKey = $model->{$this->foreignKey};

return $foreignKey instanceof BackedEnum ? $foreignKey->value : $foreignKey;
return enum_value($foreignKey);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

namespace Illuminate\Database\Eloquent\Relations\Concerns;

use BackedEnum;
use InvalidArgumentException;
use UnitEnum;

use function Illuminate\Support\enum_value;

trait InteractsWithDictionary
{
/**
Expand All @@ -24,7 +25,7 @@ protected function getDictionaryKey($attribute)
}

if ($attribute instanceof UnitEnum) {
return $attribute instanceof BackedEnum ? $attribute->value : $attribute->name;
return enum_value($attribute);
}

throw new InvalidArgumentException('Model attribute value is an object but does not have a __toString method.');
Expand Down
10 changes: 3 additions & 7 deletions src/Illuminate/Queue/Middleware/RateLimited.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

namespace Illuminate\Queue\Middleware;

use BackedEnum;
use Illuminate\Cache\RateLimiter;
use Illuminate\Cache\RateLimiting\Unlimited;
use Illuminate\Container\Container;
use Illuminate\Support\Arr;
use UnitEnum;

use function Illuminate\Support\enum_value;

class RateLimited
{
Expand Down Expand Up @@ -42,11 +42,7 @@ public function __construct($limiterName)
{
$this->limiter = Container::getInstance()->make(RateLimiter::class);

$this->limiterName = match (true) {
$limiterName instanceof BackedEnum => $limiterName->value,
$limiterName instanceof UnitEnum => $limiterName->name,
default => (string) $limiterName,
};
$this->limiterName = (string) enum_value($limiterName);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

namespace Illuminate\Routing;

use BackedEnum;
use Illuminate\Support\Arr;

use function Illuminate\Support\enum_value;

trait CreatesRegularExpressionRouteConstraints
{
/**
Expand Down Expand Up @@ -74,7 +75,7 @@ public function whereIn($parameters, array $values)
return $this->assignExpressionToParameters(
$parameters,
collect($values)
->map(fn ($value) => $value instanceof BackedEnum ? $value->value : $value)
->map(fn ($value) => enum_value($value))
->implode('|')
);
}
Expand Down
4 changes: 3 additions & 1 deletion src/Illuminate/Routing/Route.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
use LogicException;
use Symfony\Component\Routing\Route as SymfonyRoute;

use function Illuminate\Support\enum_value;

class Route
{
use CreatesRegularExpressionRouteConstraints, FiltersControllerMiddleware, Macroable, ResolvesRouteDependencies;
Expand Down Expand Up @@ -1087,7 +1089,7 @@ public function middleware($middleware = null)
*/
public function can($ability, $models = [])
{
$ability = $ability instanceof BackedEnum ? $ability->value : $ability;
$ability = enum_value($ability);

return empty($models)
? $this->middleware(['can:'.$ability])
Expand Down
5 changes: 1 addition & 4 deletions src/Illuminate/Support/Js.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Illuminate\Support;

use BackedEnum;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Htmlable;
use Illuminate\Contracts\Support\Jsonable;
Expand Down Expand Up @@ -71,9 +70,7 @@ protected function convertDataToJavaScriptExpression($data, $flags = 0, $depth =
return $data->toHtml();
}

if ($data instanceof BackedEnum) {
$data = $data->value;
}
$data = enum_value($data);

$json = static::encode($data, $flags, $depth);

Expand Down
Loading

0 comments on commit a236107

Please sign in to comment.