Skip to content

Commit 50ae5a2

Browse files
authored
[5.x] Asset validation rules as string in GraphQL, part 2 (#11790)
1 parent 4efb48c commit 50ae5a2

8 files changed

Lines changed: 44 additions & 13 deletions

File tree

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Statamic\Contracts\GraphQL;
4+
5+
interface CastableToValidationString
6+
{
7+
public function toGqlValidationString(): string;
8+
}

src/Fieldtypes/Assets/DimensionsRule.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
namespace Statamic\Fieldtypes\Assets;
44

55
use Illuminate\Contracts\Validation\Rule;
6+
use Statamic\Contracts\GraphQL\CastableToValidationString;
67
use Statamic\Facades\Asset;
78
use Statamic\Statamic;
89
use Symfony\Component\HttpFoundation\File\UploadedFile;
910

10-
class DimensionsRule implements Rule
11+
class DimensionsRule implements CastableToValidationString, Rule
1112
{
1213
protected $parameters;
1314

@@ -125,7 +126,7 @@ protected function failsRatioCheck($parameters, $width, $height)
125126
return abs($numerator / $denominator - $width / $height) > $precision;
126127
}
127128

128-
public function __toString()
129+
public function toGqlValidationString(): string
129130
{
130131
return 'dimensions:'.implode(',', $this->parameters);
131132
}

src/Fieldtypes/Assets/ImageRule.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
namespace Statamic\Fieldtypes\Assets;
44

55
use Illuminate\Contracts\Validation\Rule;
6+
use Statamic\Contracts\GraphQL\CastableToValidationString;
67
use Statamic\Facades\Asset;
78
use Statamic\Statamic;
89
use Symfony\Component\HttpFoundation\File\UploadedFile;
910

10-
class ImageRule implements Rule
11+
class ImageRule implements CastableToValidationString, Rule
1112
{
1213
protected $parameters;
1314

@@ -50,7 +51,7 @@ public function message()
5051
return __((Statamic::isCpRoute() ? 'statamic::' : '').'validation.image');
5152
}
5253

53-
public function __toString()
54+
public function toGqlValidationString(): string
5455
{
5556
return 'image:'.implode(',', $this->parameters);
5657
}

src/Fieldtypes/Assets/MimesRule.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
namespace Statamic\Fieldtypes\Assets;
44

55
use Illuminate\Contracts\Validation\Rule;
6+
use Statamic\Contracts\GraphQL\CastableToValidationString;
67
use Statamic\Facades\Asset;
78
use Statamic\Statamic;
89
use Symfony\Component\HttpFoundation\File\UploadedFile;
910

10-
class MimesRule implements Rule
11+
class MimesRule implements CastableToValidationString, Rule
1112
{
1213
protected $parameters;
1314

@@ -52,7 +53,7 @@ public function message()
5253
return str_replace(':values', implode(', ', $this->parameters), __((Statamic::isCpRoute() ? 'statamic::' : '').'validation.mimes'));
5354
}
5455

55-
public function __toString()
56+
public function toGqlValidationString(): string
5657
{
5758
return 'mimes:'.implode(',', $this->parameters);
5859
}

src/Fieldtypes/Assets/MimetypesRule.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
namespace Statamic\Fieldtypes\Assets;
44

55
use Illuminate\Contracts\Validation\Rule;
6+
use Statamic\Contracts\GraphQL\CastableToValidationString;
67
use Statamic\Facades\Asset;
78
use Statamic\Statamic;
89
use Symfony\Component\HttpFoundation\File\UploadedFile;
910

10-
class MimetypesRule implements Rule
11+
class MimetypesRule implements CastableToValidationString, Rule
1112
{
1213
protected $parameters;
1314

@@ -47,7 +48,7 @@ public function message()
4748
return str_replace(':values', implode(', ', $this->parameters), __((Statamic::isCpRoute() ? 'statamic::' : '').'validation.mimetypes'));
4849
}
4950

50-
public function __toString()
51+
public function toGqlValidationString(): string
5152
{
5253
return 'mimetypes:'.implode(',', $this->parameters);
5354
}

src/Fieldtypes/Assets/SizeBasedRule.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
namespace Statamic\Fieldtypes\Assets;
44

55
use Illuminate\Contracts\Validation\Rule;
6+
use Statamic\Contracts\GraphQL\CastableToValidationString;
67
use Statamic\Facades\Asset;
78
use Symfony\Component\HttpFoundation\File\UploadedFile;
89

9-
abstract class SizeBasedRule implements Rule
10+
abstract class SizeBasedRule implements CastableToValidationString, Rule
1011
{
1112
protected $parameters;
1213

@@ -67,7 +68,7 @@ protected function getFileSize($id)
6768
return false;
6869
}
6970

70-
public function __toString()
71+
public function toGqlValidationString(): string
7172
{
7273
return 'size:'.implode(',', $this->parameters);
7374
}

src/GraphQL/Types/FormType.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Statamic\GraphQL\Types;
44

55
use Statamic\Contracts\Forms\Form;
6+
use Statamic\Contracts\GraphQL\CastableToValidationString;
67
use Statamic\Facades\GraphQL;
78
use Statamic\Fields\Value;
89

@@ -42,11 +43,11 @@ public function fields(): array
4243
return $rule;
4344
}
4445

45-
if ($rule instanceof \Stringable) {
46-
return (string) $rule;
46+
if ($rule instanceof CastableToValidationString) {
47+
return $rule->toGqlValidationString();
4748
}
4849

49-
return $rule;
50+
return get_class($rule).'::class';
5051
});
5152
})
5253
->all();

tests/Feature/GraphQL/FormTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Facades\Statamic\Fields\BlueprintRepository;
77
use PHPUnit\Framework\Attributes\Group;
88
use PHPUnit\Framework\Attributes\Test;
9+
use Statamic\Contracts\GraphQL\CastableToValidationString;
910
use Statamic\Facades\Blueprint;
1011
use Statamic\Facades\Form;
1112
use Tests\PreventSavingStacheItemsToDisk;
@@ -333,6 +334,8 @@ public function it_returns_string_based_validation_rules_for_mimes_mimetypes_dim
333334
'dimensions:1024',
334335
'size:1000',
335336
'image:jpeg',
337+
'new Tests\Feature\GraphQL\TestValidationRuleWithToString',
338+
'new Tests\Feature\GraphQL\TestValidationRuleWithoutToString',
336339
],
337340
],
338341
]);
@@ -359,6 +362,8 @@ public function it_returns_string_based_validation_rules_for_mimes_mimetypes_dim
359362
'dimensions:1024',
360363
'size:1000',
361364
'image:jpeg',
365+
'thevalidationrule:foo,bar',
366+
'Tests\\Feature\\GraphQL\\TestValidationRuleWithoutToString::class',
362367
'array',
363368
'nullable',
364369
],
@@ -367,3 +372,15 @@ public function it_returns_string_based_validation_rules_for_mimes_mimetypes_dim
367372
]]);
368373
}
369374
}
375+
376+
class TestValidationRuleWithToString implements CastableToValidationString
377+
{
378+
public function toGqlValidationString(): string
379+
{
380+
return 'thevalidationrule:foo,bar';
381+
}
382+
}
383+
384+
class TestValidationRuleWithoutToString
385+
{
386+
}

0 commit comments

Comments
 (0)