From f87b25a7b5bd29461b11c0cb74751ef7da5a89ee Mon Sep 17 00:00:00 2001 From: Ruben Van Assche Date: Tue, 10 Sep 2024 15:25:19 +0200 Subject: [PATCH] Move some interfaces aaround --- src/Concerns/TransformableData.php | 3 ++- src/Contracts/IncludeableData.php | 2 +- src/Contracts/ResponsableData.php | 2 +- src/Contracts/TransformableData.php | 2 +- src/Contracts/WrappableData.php | 2 +- src/CursorPaginatedDataCollection.php | 3 ++- src/Data.php | 3 ++- src/DataCollection.php | 7 +++++-- src/PaginatedDataCollection.php | 3 ++- src/Resolvers/TransformedDataCollectableResolver.php | 6 +++++- src/Support/Partials/Partial.php | 5 ++--- src/Support/Transformation/DataContext.php | 5 ++--- src/Support/Transformation/TransformationContext.php | 8 ++------ .../Transformation/TransformationContextFactory.php | 5 ++--- tests/Support/DataReturnTypeTest.php | 2 +- 15 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/Concerns/TransformableData.php b/src/Concerns/TransformableData.php index 30d5da211..b18f3c2b7 100644 --- a/src/Concerns/TransformableData.php +++ b/src/Concerns/TransformableData.php @@ -5,6 +5,7 @@ use Exception; use Spatie\LaravelData\Contracts\BaseData as BaseDataContract; use Spatie\LaravelData\Contracts\BaseDataCollectable as BaseDataCollectableContract; +use Spatie\LaravelData\Contracts\ContextableData as ContextableDataContract; use Spatie\LaravelData\Contracts\IncludeableData as IncludeableDataContract; use Spatie\LaravelData\Support\DataContainer; use Spatie\LaravelData\Support\EloquentCasts\DataEloquentCast; @@ -31,7 +32,7 @@ public function transform( default => throw new Exception('Cannot transform data object') }; - if ($this instanceof IncludeableDataContract) { + if ($this instanceof IncludeableDataContract && $this instanceof ContextableDataContract) { $transformationContext->mergePartialsFromDataContext($this); } diff --git a/src/Contracts/IncludeableData.php b/src/Contracts/IncludeableData.php index 3aee794b9..c16604fe2 100644 --- a/src/Contracts/IncludeableData.php +++ b/src/Contracts/IncludeableData.php @@ -4,7 +4,7 @@ use Closure; -interface IncludeableData extends ContextableData +interface IncludeableData { public function include(string ...$includes): object; diff --git a/src/Contracts/ResponsableData.php b/src/Contracts/ResponsableData.php index 1bf1d65dd..e59d3831a 100644 --- a/src/Contracts/ResponsableData.php +++ b/src/Contracts/ResponsableData.php @@ -4,7 +4,7 @@ use Illuminate\Contracts\Support\Responsable; -interface ResponsableData extends TransformableData, Responsable +interface ResponsableData extends Responsable { /** * @param \Illuminate\Http\Request $request diff --git a/src/Contracts/TransformableData.php b/src/Contracts/TransformableData.php index 41cd2ea41..f2b93245c 100644 --- a/src/Contracts/TransformableData.php +++ b/src/Contracts/TransformableData.php @@ -9,7 +9,7 @@ use Spatie\LaravelData\Support\Transformation\TransformationContext; use Spatie\LaravelData\Support\Transformation\TransformationContextFactory; -interface TransformableData extends JsonSerializable, Jsonable, Arrayable, EloquentCastable, ContextableData +interface TransformableData extends JsonSerializable, Jsonable, Arrayable, EloquentCastable { public function transform( null|TransformationContextFactory|TransformationContext $transformationContext = null, diff --git a/src/Contracts/WrappableData.php b/src/Contracts/WrappableData.php index da50bdb30..eb4f5deec 100644 --- a/src/Contracts/WrappableData.php +++ b/src/Contracts/WrappableData.php @@ -4,7 +4,7 @@ use Spatie\LaravelData\Support\Wrapping\Wrap; -interface WrappableData extends ContextableData +interface WrappableData { public function withoutWrapping(); diff --git a/src/CursorPaginatedDataCollection.php b/src/CursorPaginatedDataCollection.php index 51e1c0f4a..20f23dfe9 100644 --- a/src/CursorPaginatedDataCollection.php +++ b/src/CursorPaginatedDataCollection.php @@ -14,6 +14,7 @@ use Spatie\LaravelData\Concerns\TransformableData; use Spatie\LaravelData\Concerns\WrappableData; use Spatie\LaravelData\Contracts\BaseDataCollectable as BaseDataCollectableContract; +use Spatie\LaravelData\Contracts\ContextableData as ContextableDataContract; use Spatie\LaravelData\Contracts\IncludeableData as IncludeableDataContract; use Spatie\LaravelData\Contracts\ResponsableData as ResponsableDataContract; use Spatie\LaravelData\Contracts\TransformableData as TransformableDataContract; @@ -28,7 +29,7 @@ * * @implements IteratorAggregate */ -class CursorPaginatedDataCollection implements Responsable, BaseDataCollectableContract, TransformableDataContract, ResponsableDataContract, IncludeableDataContract, WrappableDataContract, IteratorAggregate, Countable +class CursorPaginatedDataCollection implements Responsable, BaseDataCollectableContract, TransformableDataContract, ContextableDataContract, ResponsableDataContract, IncludeableDataContract, WrappableDataContract, IteratorAggregate, Countable { use ResponsableData; use IncludeableData; diff --git a/src/Data.php b/src/Data.php index 1a661ab5a..869e11bc0 100644 --- a/src/Data.php +++ b/src/Data.php @@ -14,6 +14,7 @@ use Spatie\LaravelData\Concerns\WrappableData; use Spatie\LaravelData\Contracts\AppendableData as AppendableDataContract; use Spatie\LaravelData\Contracts\BaseData as BaseDataContract; +use Spatie\LaravelData\Contracts\ContextableData as ContextableDataContract; use Spatie\LaravelData\Contracts\EmptyData as EmptyDataContract; use Spatie\LaravelData\Contracts\IncludeableData as IncludeableDataContract; use Spatie\LaravelData\Contracts\ResponsableData as ResponsableDataContract; @@ -21,7 +22,7 @@ use Spatie\LaravelData\Contracts\ValidateableData as ValidateableDataContract; use Spatie\LaravelData\Contracts\WrappableData as WrappableDataContract; -abstract class Data implements Responsable, AppendableDataContract, BaseDataContract, TransformableDataContract, IncludeableDataContract, ResponsableDataContract, ValidateableDataContract, WrappableDataContract, EmptyDataContract +abstract class Data implements Responsable, AppendableDataContract, BaseDataContract, TransformableDataContract, ContextableDataContract, IncludeableDataContract, ResponsableDataContract, ValidateableDataContract, WrappableDataContract, EmptyDataContract { use ResponsableData; use IncludeableData; diff --git a/src/DataCollection.php b/src/DataCollection.php index 89666bc02..8ef34a672 100644 --- a/src/DataCollection.php +++ b/src/DataCollection.php @@ -17,6 +17,7 @@ use Spatie\LaravelData\Concerns\WrappableData; use Spatie\LaravelData\Contracts\BaseData; use Spatie\LaravelData\Contracts\BaseDataCollectable as BaseDataCollectableContract; +use Spatie\LaravelData\Contracts\ContextableData as ContextableDataContract; use Spatie\LaravelData\Contracts\IncludeableData as IncludeableDataContract; use Spatie\LaravelData\Contracts\ResponsableData as ResponsableDataContract; use Spatie\LaravelData\Contracts\TransformableData as TransformableDataContract; @@ -32,7 +33,7 @@ * @implements \ArrayAccess * @implements IteratorAggregate */ -class DataCollection implements Responsable, BaseDataCollectableContract, TransformableDataContract, ResponsableDataContract, IncludeableDataContract, WrappableDataContract, IteratorAggregate, Countable, ArrayAccess +class DataCollection implements Responsable, BaseDataCollectableContract, TransformableDataContract, ResponsableDataContract, IncludeableDataContract, WrappableDataContract, ContextableDataContract, IteratorAggregate, Countable, ArrayAccess { /** @use \Spatie\LaravelData\Concerns\BaseDataCollectable */ use BaseDataCollectable; @@ -112,7 +113,9 @@ public function offsetGet($offset): mixed $data = $this->items->offsetGet($offset); - if ($data instanceof IncludeableDataContract) { + if ($data instanceof IncludeableDataContract + && $data instanceof ContextableDataContract + ) { $data->getDataContext()->mergePartials($this->getDataContext()); } diff --git a/src/PaginatedDataCollection.php b/src/PaginatedDataCollection.php index 3c67a525b..55c6554c3 100644 --- a/src/PaginatedDataCollection.php +++ b/src/PaginatedDataCollection.php @@ -14,6 +14,7 @@ use Spatie\LaravelData\Concerns\TransformableData; use Spatie\LaravelData\Concerns\WrappableData; use Spatie\LaravelData\Contracts\BaseDataCollectable as BaseDataCollectableContract; +use Spatie\LaravelData\Contracts\ContextableData as ContextableDataContract; use Spatie\LaravelData\Contracts\IncludeableData as IncludeableDataContract; use Spatie\LaravelData\Contracts\ResponsableData as ResponsableDataContract; use Spatie\LaravelData\Contracts\TransformableData as TransformableDataContract; @@ -28,7 +29,7 @@ * * @implements IteratorAggregate */ -class PaginatedDataCollection implements Responsable, BaseDataCollectableContract, TransformableDataContract, ResponsableDataContract, IncludeableDataContract, WrappableDataContract, IteratorAggregate, Countable +class PaginatedDataCollection implements Responsable, BaseDataCollectableContract, TransformableDataContract, ContextableDataContract, ResponsableDataContract, IncludeableDataContract, WrappableDataContract, IteratorAggregate, Countable { use ResponsableData; use IncludeableData; diff --git a/src/Resolvers/TransformedDataCollectableResolver.php b/src/Resolvers/TransformedDataCollectableResolver.php index a69765498..d3b0f458a 100644 --- a/src/Resolvers/TransformedDataCollectableResolver.php +++ b/src/Resolvers/TransformedDataCollectableResolver.php @@ -10,6 +10,7 @@ use Illuminate\Support\Arr; use Illuminate\Support\Enumerable; use Spatie\LaravelData\Contracts\BaseData; +use Spatie\LaravelData\Contracts\ContextableData as ContextableDataContract; use Spatie\LaravelData\Contracts\TransformableData; use Spatie\LaravelData\Contracts\WrappableData; use Spatie\LaravelData\CursorPaginatedDataCollection; @@ -170,7 +171,10 @@ protected function transformationClosure( return $data; } - if ($nestedContext->transformValues === false && $nestedContext->hasPartials()) { + if ($nestedContext->transformValues === false + && $nestedContext->hasPartials() + && $data instanceof ContextableDataContract + ) { $data->getDataContext()->mergeTransformationContext($nestedContext); return $data; diff --git a/src/Support/Partials/Partial.php b/src/Support/Partials/Partial.php index 9c7561b4f..82c6c9291 100644 --- a/src/Support/Partials/Partial.php +++ b/src/Support/Partials/Partial.php @@ -4,8 +4,7 @@ use Closure; use Laravel\SerializableClosure\SerializableClosure; -use Spatie\LaravelData\Contracts\BaseData; -use Spatie\LaravelData\Contracts\BaseDataCollectable; +use Spatie\LaravelData\Contracts\IncludeableData; use Spatie\LaravelData\Support\Partials\Segments\AllPartialSegment; use Spatie\LaravelData\Support\Partials\Segments\FieldsPartialSegment; use Spatie\LaravelData\Support\Partials\Segments\NestedPartialSegment; @@ -218,7 +217,7 @@ protected function getCurrentSegment(): ?PartialSegment return $this->segments[$this->pointer] ?? null; } - public function isRequired(BaseData|BaseDataCollectable $data): bool + public function isRequired(IncludeableData $data): bool { if ($this->condition === null) { return true; diff --git a/src/Support/Transformation/DataContext.php b/src/Support/Transformation/DataContext.php index f754d596f..fee3f7651 100644 --- a/src/Support/Transformation/DataContext.php +++ b/src/Support/Transformation/DataContext.php @@ -2,8 +2,7 @@ namespace Spatie\LaravelData\Support\Transformation; -use Spatie\LaravelData\Contracts\BaseData; -use Spatie\LaravelData\Contracts\BaseDataCollectable; +use Spatie\LaravelData\Contracts\IncludeableData; use Spatie\LaravelData\Support\DataContainer; use Spatie\LaravelData\Support\Partials\PartialsCollection; use Spatie\LaravelData\Support\Wrapping\Wrap; @@ -105,7 +104,7 @@ public function mergeTransformationContext( } public function getRequiredPartialsAndRemoveTemporaryOnes( - BaseData|BaseDataCollectable $data, + IncludeableData $data, PartialsCollection $partials, ): PartialsCollection { $requiredPartials = new PartialsCollection(); diff --git a/src/Support/Transformation/TransformationContext.php b/src/Support/Transformation/TransformationContext.php index db0eee545..e21e715fb 100644 --- a/src/Support/Transformation/TransformationContext.php +++ b/src/Support/Transformation/TransformationContext.php @@ -2,8 +2,7 @@ namespace Spatie\LaravelData\Support\Transformation; -use Spatie\LaravelData\Contracts\BaseData; -use Spatie\LaravelData\Contracts\BaseDataCollectable; +use Spatie\LaravelData\Contracts\ContextableData; use Spatie\LaravelData\Contracts\IncludeableData; use Spatie\LaravelData\Support\Partials\Partial; use Spatie\LaravelData\Support\Partials\PartialsCollection; @@ -144,11 +143,8 @@ public function rollBackPartialsWhenRequired(): void } } - /** - * @param IncludeableData&(BaseData|BaseDataCollectable) $data - */ public function mergePartialsFromDataContext( - IncludeableData $data + IncludeableData&ContextableData $data ): self { $dataContext = $data->getDataContext(); diff --git a/src/Support/Transformation/TransformationContextFactory.php b/src/Support/Transformation/TransformationContextFactory.php index 6076b6f1a..f51e597ed 100644 --- a/src/Support/Transformation/TransformationContextFactory.php +++ b/src/Support/Transformation/TransformationContextFactory.php @@ -2,8 +2,7 @@ namespace Spatie\LaravelData\Support\Transformation; -use Spatie\LaravelData\Contracts\BaseData; -use Spatie\LaravelData\Contracts\BaseDataCollectable; +use Spatie\LaravelData\Contracts\IncludeableData; use Spatie\LaravelData\Support\Partials\ForwardsToPartialsDefinition; use Spatie\LaravelData\Support\Partials\PartialsCollection; use Spatie\LaravelData\Support\Wrapping\WrapExecutionType; @@ -37,7 +36,7 @@ protected function __construct( } public function get( - BaseData|BaseDataCollectable $data, + IncludeableData $data, ): TransformationContext { $includePartials = null; diff --git a/tests/Support/DataReturnTypeTest.php b/tests/Support/DataReturnTypeTest.php index 9426e510d..57e1e301f 100644 --- a/tests/Support/DataReturnTypeTest.php +++ b/tests/Support/DataReturnTypeTest.php @@ -109,10 +109,10 @@ public function none() Spatie\LaravelData\Contracts\ResponsableData::class, Spatie\LaravelData\Contracts\IncludeableData::class, Spatie\LaravelData\Contracts\WrappableData::class, + Spatie\LaravelData\Contracts\ContextableData::class, IteratorAggregate::class, Countable::class, ArrayAccess::class, - Spatie\LaravelData\Contracts\ContextableData::class, Illuminate\Contracts\Database\Eloquent\Castable::class, Illuminate\Contracts\Support\Arrayable::class, Illuminate\Contracts\Support\Jsonable::class,