Skip to content

Commit 9012774

Browse files
committed
update: Added modifier to enum rule
1 parent d174f74 commit 9012774

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

src/RuleSet.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,10 +446,17 @@ public function endsWith(string ...$value): self
446446
*
447447
* @link https://laravel.com/docs/10.x/validation#rule-enum
448448
* @param class-string $type
449+
* @param ?callable(\Illuminate\Validation\Rules\Enum): void $modifier
449450
*/
450-
public function enum(string $type): self
451+
public function enum(string $type, ?callable $modifier = null): self
451452
{
452-
return $this->rule(Rule::enum($type));
453+
$rule = Rule::enum($type);
454+
455+
if ($modifier) {
456+
$modifier($rule);
457+
}
458+
459+
return $this->rule($rule);
453460
}
454461

455462
/**

tests/Stubs/ExampleStringEnum.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66

77
enum ExampleStringEnum: string
88
{
9+
case Another = 'another';
910
case Valid = 'valid';
1011
}

tests/Unit/RuleTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Illuminate\Support\Facades\Validator;
1919
use Illuminate\Support\Str;
2020
use Illuminate\Validation\Rules\Dimensions;
21+
use Illuminate\Validation\Rules\Enum;
2122
use Illuminate\Validation\Rules\Password;
2223
use Sourcetoad\RuleHelper\Rule;
2324
use Sourcetoad\RuleHelper\RuleSet;
@@ -953,6 +954,22 @@ public function ruleDataProvider(): array
953954
'rules' => fn() => RuleSet::create()->enum(ExampleIntEnum::class),
954955
'fails' => true,
955956
],
957+
'enum string constrained valid' => [
958+
'data' => 'another',
959+
'rules' => fn() => RuleSet::create()->enum(
960+
ExampleStringEnum::class,
961+
fn(Enum $rule) => $rule->only(ExampleStringEnum::Another),
962+
),
963+
'fails' => false,
964+
],
965+
'enum string constrained invalid' => [
966+
'data' => 'another',
967+
'rules' => fn() => RuleSet::create()->enum(
968+
ExampleStringEnum::class,
969+
fn(Enum $rule) => $rule->except(ExampleStringEnum::Another),
970+
),
971+
'fails' => true,
972+
],
956973
'extensions valid' => [
957974
'data' => fn() => $this->mockFile('/code/image.jpg'),
958975
'rules' => fn() => RuleSet::create()->extensions('jpg', 'png'),

0 commit comments

Comments
 (0)