Spaces:
No application file
No application file
File size: 1,537 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<?php
declare(strict_types=1);
namespace Mautic\CoreBundle\Doctrine;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\Exception\SkipMigration;
abstract class PreUpAssertionMigration extends AbstractMauticMigration
{
/**
* @var array<int, array<string>>
*/
private array $skipAssertions = [];
/**
* Implement this method to add skip assertions via `PreUpAssertionMigration::skipAssertion()`.
*/
abstract protected function preUpAssertions(): void;
/**
* A template method that addresses partially executed migrations.
* It skips the migration only if all of skip assertions return true.
*/
final public function preUp(Schema $schema): void
{
$this->preUpAssertions();
if (!$this->skipAssertions) {
// there are no assertions to run
return;
}
foreach ($this->skipAssertions as $skipAssertion) {
if ($skipAssertion['assertion']($schema)) {
$this->write(sprintf('<comment>%s</comment>', $skipAssertion['message']));
} else {
// the migration should not be skipped once there is a failing skip assertion
return;
}
}
throw new SkipMigration('Schema includes this migration');
}
final protected function skipAssertion(callable $assertion, string $message): void
{
$this->skipAssertions[] = [
'assertion' => $assertion,
'message' => $message,
];
}
}
|