Skip to content

Commit d0e4bac

Browse files
committed
Merge branch 'fix-bind-override'
2 parents 1bf5a1c + 211ebd6 commit d0e4bac

File tree

7 files changed

+70
-36
lines changed

7 files changed

+70
-36
lines changed

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
/src/Toolkit/Core/Facade/Sync.php linguist-generated
2424
/src/Toolkit/Curler/CurlerBuilder.php linguist-generated
2525
/src/Toolkit/Curler/Support/CurlerPageBuilder.php linguist-generated
26+
/src/Toolkit/Sync/DbSyncDefinitionBuilder.php linguist-generated
27+
/src/Toolkit/Sync/HttpSyncDefinitionBuilder.php linguist-generated
2628
/src/Toolkit/Sync/SyncErrorBuilder.php linguist-generated
2729
/src/Toolkit/Sync/SyncSerializeRulesBuilder.php linguist-generated
2830
/stubs/*.stub export-ignore

scripts/generate.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@
8181
CliOption::class => [CliOptionBuilder::class, '--forward=load', '--api'],
8282
Curler::class => [CurlerBuilder::class, '--forward', '--skip', 'responseContentTypeIs,getQueryUrl'],
8383
CurlerPage::class => CurlerPageBuilder::class,
84-
// DbSyncDefinition::class => [DbSyncDefinitionBuilder::class, '--forward=bindOverride'],
85-
// HttpSyncDefinition::class => [HttpSyncDefinitionBuilder::class, '--forward=bindOverride'],
84+
DbSyncDefinition::class => [DbSyncDefinitionBuilder::class, '--forward=bindOverride'],
85+
HttpSyncDefinition::class => [HttpSyncDefinitionBuilder::class, '--forward=bindOverride'],
8686
SyncError::class => SyncErrorBuilder::class,
8787
SyncSerializeRules::class => SyncSerializeRulesBuilder::class,
8888
];

src/Toolkit/Sync/AbstractSyncDefinition.php

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,12 @@ abstract protected function getClosure($operation): ?Closure;
212212
/**
213213
* @var array<OP::*,Closure>
214214
*/
215-
private $Closures = [];
215+
private array $Closures = [];
216216

217217
/**
218-
* @var static|null
218+
* @var static
219219
*/
220-
private $WithoutOverrides;
220+
private self $WithoutOverrides;
221221

222222
/**
223223
* @param class-string<TEntity> $entity
@@ -296,13 +296,20 @@ public function __construct(
296296
public function __clone()
297297
{
298298
$this->Closures = [];
299-
$this->WithoutOverrides = null;
299+
unset($this->WithoutOverrides);
300300
}
301301

302302
/**
303-
* @template T of SyncEntityInterface
303+
* Bind a sync operation closure to the definition
304304
*
305-
* @param Closure(SyncDefinitionInterface<T,TProvider>, OP::*, SyncContextInterface, mixed...): (iterable<T>|T) $override
305+
* Apply this method to a closure if necessary to satisfy static analysis
306+
* tools that it's a valid override for an operation on entities serviced
307+
* via the definition.
308+
*
309+
* @template T0 of SyncEntityInterface
310+
* @template T1 of SyncDefinitionInterface
311+
*
312+
* @param Closure(T1, OP::*, SyncContextInterface, mixed...): (iterable<T0>|T0) $override
306313
* @return Closure(static, OP::*, SyncContextInterface, mixed...): (iterable<TEntity>|TEntity)
307314
*/
308315
public function bindOverride(Closure $override): Closure
@@ -401,24 +408,27 @@ function (SyncContextInterface $ctx, $id, ...$args) use ($closure) {
401408
*/
402409
final public function getFallbackClosure($operation): ?Closure
403410
{
404-
$clone = $this->WithoutOverrides;
405-
if (!$clone) {
411+
if (!isset($this->WithoutOverrides)) {
406412
$clone = clone $this;
407413
$clone->Overrides = [];
408414
$this->WithoutOverrides = $clone;
409415
}
410416

411-
return $clone->getSyncOperationClosure($operation);
417+
return $this->WithoutOverrides->getSyncOperationClosure($operation);
412418
}
413419

414420
/**
415421
* Specify whether to perform READ operations by iterating over entities
416422
* returned by READ_LIST
417423
*
418-
* @return $this
424+
* @return static
419425
*/
420426
final public function withReadFromReadList(bool $readFromReadList = true)
421427
{
428+
if ($this->ReadFromReadList === $readFromReadList) {
429+
return $this;
430+
}
431+
422432
$clone = clone $this;
423433
$clone->ReadFromReadList = $readFromReadList;
424434

src/Toolkit/Sync/DbSyncDefinition.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,18 @@ public function __construct(
8383
$this->Table = $table;
8484
}
8585

86+
/**
87+
* @template T0 of SyncEntityInterface
88+
* @template T1 of DbSyncDefinition
89+
*
90+
* @param Closure(T1, OP::*, SyncContextInterface, mixed...): (iterable<T0>|T0) $override
91+
* @return Closure(DbSyncDefinition<TEntity,TProvider>, OP::*, SyncContextInterface, mixed...): (iterable<TEntity>|TEntity)
92+
*/
93+
public function bindOverride(Closure $override): Closure
94+
{
95+
return parent::bindOverride($override);
96+
}
97+
8698
protected function getClosure($operation): ?Closure
8799
{
88100
// Return null if no table name has been provided

src/Toolkit/Sync/DbSyncDefinitionBuilder.php

Lines changed: 11 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Toolkit/Sync/HttpSyncDefinition.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,18 @@ public function __construct(
303303
$this->SyncOneEntityPerRequest = $syncOneEntityPerRequest;
304304
}
305305

306+
/**
307+
* @template T0 of SyncEntityInterface
308+
* @template T1 of HttpSyncDefinition
309+
*
310+
* @param Closure(T1, OP::*, SyncContextInterface, mixed...): (iterable<T0>|T0) $override
311+
* @return Closure(HttpSyncDefinition<TEntity,TProvider>, OP::*, SyncContextInterface, mixed...): (iterable<TEntity>|TEntity)
312+
*/
313+
public function bindOverride(Closure $override): Closure
314+
{
315+
return parent::bindOverride($override);
316+
}
317+
306318
/**
307319
* Set the path to the provider endpoint servicing the entity
308320
*

src/Toolkit/Sync/HttpSyncDefinitionBuilder.php

Lines changed: 11 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)