Skip to content

Commit

Permalink
v73.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
gammamatrix committed Jul 7, 2024
1 parent 0002a3a commit 17ca6db
Show file tree
Hide file tree
Showing 3 changed files with 166 additions and 61 deletions.
224 changes: 163 additions & 61 deletions src/Concerns/Migrations.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,29 @@
*/
trait Migrations
{
protected bool $load_migrations_laravel = false;

protected string $load_migrations_playground_test;
/**
* @var array<string, array<int, string>>
*/
protected array $load_migrations = [
// Grouped by organizations and keyed by packages.
// 'gammamatrix' => [
// 'playground-cms' => [],
// 'playground-leads' => [],
// 'playground-matrix' => [],
// 'playground-test' => [
// 'migrations-testing',
// ],
// ],
];

protected string $load_migrations_package = '';
protected bool $load_migrations_laravel = false;

protected string $load_migrations_package_migration = '';
protected bool $load_migrations_package = false;

protected bool $load_migrations_playground = false;

protected string $load_migrations_playground_test;

/**
* Define database migrations.
*
Expand All @@ -44,88 +57,174 @@ protected function defineDatabaseMigrations()
$this->loadMigrationsFrom($folderForVendor.'/gammamatrix/playground-test/database/migrations-playground');
}
if ($this->load_migrations_package) {
$this->loadPackageMigration($folderForVendor, $this->load_migrations_package);
$this->loadPackageMigrations();
}
if ($this->load_migrations) {
$this->loadMigrationsFromPackages($folderForVendor);
}
}
}

protected function loadPackageMigration(
string $folderForVendor,
string $package,
string $migrations = null
): void {
protected function loadPackageMigrations(): void
{
if (empty($this->package_providers_dir)
|| ! Str::endsWith($this->package_providers_dir, '/tests/Unit')
) {
throw new ValueError(
'Expecting package_providers_dir to be set in PackageProviders'
);
}

$organization = Str::of($package)->before('/')->toString();
$organization_package = Str::of($package)->after('/')->toString();
$folderForPackage = Str::of($this->package_providers_dir)->before('/tests/Unit')->toString();

if (empty($organization)) {
throw new ValueError('Expecting the Packagist Organization to be provided.');
}
$folderForPackageMigrations = sprintf('%1$s/database/migrations', $folderForPackage);

if (empty($organization_package)) {
if (! is_dir($folderForPackageMigrations)) {
throw new ValueError(sprintf(
'Expecting the Packagist Organization [%1$s] Package to be provided in the $package [%2$s]',
$organization,
$package
'Expecting the package to have database migrations: [%1$s]',
$folderForPackageMigrations
));
}

$folderForOrganization = sprintf('%1$s/%2$s', $folderForVendor, $organization);
$this->loadMigrationsFrom($folderForPackageMigrations);
}

if (! is_dir($folderForOrganization)) {
throw new ValueError(sprintf(
'Expecting the Composer vendor folder for [%1$s] to exist: [%2$s]',
$organization,
$folderForOrganization
));
}
/**
* @param array<int, string> $packages
*/
private function loadMigrationsFromPackages_org(
string $folderForOrganization,
string $organization,
array $packages
): void {
foreach ($packages as $package => $migrations) {

if (empty($package) || ! is_string($package)) {
throw new ValueError(sprintf(
'Expecting the package to be provided from the Packagist Organization [%1$s]: [%2$s] ',
$organization,
$folderForOrganization
));
}

$folderForOrganizationPackage = sprintf('%1$s/%2$s', $folderForOrganization, $organization_package);
if (empty($migrations) || ! is_array($migrations)) {
$migrations = [
'migrations',
];
}

if (! is_dir($folderForOrganizationPackage)) {
throw new ValueError(sprintf(
'Expecting the package to be found under Composer vendor folder for [%1$s]: [%2$s]',
$package,
$folderForOrganizationPackage
));
}
$folderForOrganizationPackage = sprintf('%1$s/%2$s', $folderForOrganization, $package);
// dump([
// '__METHOD__' => __METHOD__,
// '$package' => $package,
// '$migrations' => $migrations,
// '$organization' => $organization,
// '$folderForOrganization' => $folderForOrganization,
// '$folderForOrganizationPackage' => $folderForOrganizationPackage,
// ]);
if (! is_dir($folderForOrganizationPackage)) {
throw new ValueError(sprintf(
'Expecting the package to be found under Composer vendor folder for [%1$s]: [%2$s]',
$package,
$folderForOrganizationPackage
));
}

$folderForOrganizationPackageDatabase = $folderForOrganizationPackage.'/database';
$folderForOrganizationPackageDatabase = $folderForOrganizationPackage.'/database';

if (! is_dir($folderForOrganizationPackageDatabase)) {
throw new ValueError(sprintf(
'Expecting the organization [%1$s] to have a database folder under: [%2$s]',
if (! is_dir($folderForOrganizationPackageDatabase)) {
throw new ValueError(sprintf(
'Expecting the organization [%1$s] to have a database folder under: [%2$s]',
$organization,
$folderForOrganizationPackageDatabase
));
}

// if (empty($migrations)) {
// throw new ValueError(sprintf(
// 'Expecting a folder, for the set of migrations, to be provided: [%1$s]',
// $folderForOrganizationPackageDatabase
// ));
// }

$this->loadMigrationsFromPackages_migrations(
$folderForOrganizationPackageDatabase,
$organization,
$folderForOrganizationPackageDatabase
));
$package,
$migrations,
);
}
}

if (is_null($migrations)) {
if ($this->load_migrations_package_migration) {
$migrations = trim($this->load_migrations_package_migration, '/\\');
} else {
$migrations = 'migrations';
/**
* @param array<int, string> $migrations
*/
private function loadMigrationsFromPackages_migrations(
string $folderForOrganizationPackageDatabase,
string $organization,
string $package,
array $migrations
): void {

foreach ($migrations as $migration) {
$folderForMigrations = $folderForOrganizationPackageDatabase.'/'.$migration;

if (! is_dir($folderForMigrations)) {
throw new ValueError(sprintf(
'Expecting the organization [%1$s] to have a set of database migrations: [%2$s]',
$organization,
$folderForMigrations
));
}
}

if (empty($migrations)) {
throw new ValueError(sprintf(
'Expecting a folder, for the set of migrations, to be provided: [%1$s]',
$folderForOrganizationPackageDatabase
));
if (! is_dir($folderForOrganizationPackageDatabase)) {
throw new ValueError(sprintf(
'Expecting the organization [%1$s] to have a database folder under: [%2$s]',
$organization,
$folderForOrganizationPackageDatabase
));
}

// dd([
// '__METHOD__' => __METHOD__,
// '$folderForOrganizationPackageDatabase' => $folderForOrganizationPackageDatabase,
// '$folderForMigrations' => $folderForMigrations,
// '$migration' => $migration,
// // '$migrations' => $migrations,
// '$organization' => $organization,
// '$package' => $package,
// // '$packages' => $packages,
// // '$this->load_migrations' => $this->load_migrations,
// ]);

$this->loadMigrationsFrom($folderForMigrations);
}
}

$folderForMigrations = $folderForOrganizationPackageDatabase.'/'.$migrations;
protected function loadMigrationsFromPackages(string $folderForVendor): void
{
foreach ($this->load_migrations as $organization => $packages) {

if (! is_dir($folderForMigrations)) {
throw new ValueError(sprintf(
'Expecting the organization [%1$s] to have a set of database migrations: [%2$s]',
if (empty($organization)) {
throw new ValueError('Expecting the Packagist Organization to be provided.');
}

$folderForOrganization = sprintf('%1$s/%2$s', $folderForVendor, $organization);

if (! is_dir($folderForOrganization)) {
throw new ValueError(sprintf(
'Expecting the Composer vendor folder for [%1$s] to exist: [%2$s]',
$organization,
$folderForOrganization
));
}

$this->loadMigrationsFromPackages_org(
$folderForOrganization,
$organization,
$folderForMigrations
));
$packages,
);
}

$this->loadMigrationsFrom($folderForMigrations);
}

/**
Expand Down Expand Up @@ -199,6 +298,9 @@ private function verifyPlaygroundTestExists(): string
return $folderForVendor;
}

/**
* @deprecated
*/
protected function loadPlaygroundMigration(string $folder): void
{
$playground_database = sprintf('%1$s/playground/database', dirname(dirname(dirname(__DIR__))));
Expand Down
1 change: 1 addition & 0 deletions src/Concerns/Orchestrating.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Illuminate\Support\Carbon;
use Playground\Models\User;
use Playground\Test\Models\DefaultUser;
use Playground\Test\Models\UserWithSanctum;

/**
* \Playground\Test\Concerns\Orchestrating
Expand Down
2 changes: 2 additions & 0 deletions tests/Unit/PackageProviders.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
*/
trait PackageProviders
{
protected string $package_providers_dir = __DIR__;

protected function getPackageProviders($app)
{
return [
Expand Down

0 comments on commit 17ca6db

Please sign in to comment.