Skip to content

Commit

Permalink
[11.x] Allows enum_value() to be use in standalone `illuminate/coll…
Browse files Browse the repository at this point in the history
…ections` (#53871)

* [11.x] Allows `enum_value()` to be use in standalone `illuminate/collections`

fixes #53867

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

* Update ModelInspector.php

* Update functions.php

* wip

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

* wip

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

---------

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>
  • Loading branch information
crynobone authored Dec 13, 2024
1 parent a9832e0 commit 8b6099d
Showing 3 changed files with 15 additions and 15 deletions.
6 changes: 3 additions & 3 deletions src/Illuminate/Collections/functions.php
Original file line number Diff line number Diff line change
@@ -17,11 +17,11 @@
*/
function enum_value($value, $default = null)
{
return transform($value, fn ($value) => match (true) {
return match (true) {
$value instanceof \BackedEnum => $value->value,
$value instanceof \UnitEnum => $value->name,

default => $value,
}, $default ?? $value);
default => $value ?? value($default),
};
}
}
2 changes: 1 addition & 1 deletion src/Illuminate/Database/Eloquent/ModelInspector.php
Original file line number Diff line number Diff line change
@@ -393,7 +393,7 @@ protected function getColumnDefault($column, $model)
{
$attributeDefault = $model->getAttributes()[$column['name']] ?? null;

return enum_value($attributeDefault, $column['default']);
return enum_value($attributeDefault) ?? $column['default'];
}

/**
22 changes: 11 additions & 11 deletions tests/Support/SupportEnumValueFunctionTest.php
Original file line number Diff line number Diff line change
@@ -11,25 +11,25 @@

class SupportEnumValueFunctionTest extends TestCase
{
public function test_it_can_handle_enums_value()
{
$this->assertSame('A', enum_value(TestEnum::A));

$this->assertSame(1, enum_value(TestBackedEnum::A));
$this->assertSame(2, enum_value(TestBackedEnum::B));

$this->assertSame('A', enum_value(TestStringBackedEnum::A));
$this->assertSame('B', enum_value(TestStringBackedEnum::B));
}

#[DataProvider('scalarDataProvider')]
public function test_it_can_handle_enum_value($given, $expected)
{
$this->assertSame($expected, enum_value($given));
}

public function test_it_can_fallback_to_use_default_if_value_is_null()
{
$this->assertSame('laravel', enum_value(null, 'laravel'));
$this->assertSame('laravel', enum_value(null, fn () => 'laravel'));
}

public static function scalarDataProvider()
{
yield [TestEnum::A, 'A'];
yield [TestBackedEnum::A, 1];
yield [TestBackedEnum::B, 2];
yield [TestStringBackedEnum::A, 'A'];
yield [TestStringBackedEnum::B, 'B'];
yield [null, null];
yield [0, 0];
yield ['0', '0'];

0 comments on commit 8b6099d

Please sign in to comment.