From 5c308c86259e09e1bfc2668e11ff3c321265883e Mon Sep 17 00:00:00 2001 From: Dzmitry Chubryk Date: Fri, 10 Jan 2020 17:40:49 +0300 Subject: [PATCH] Support option: organize_migrations --- config/migrations.php | 17 +++++++ src/Configuration/ConfigurationFactory.php | 8 ++++ .../ConfigurationFactoryTest.php | 45 +++++++++++-------- 3 files changed, 52 insertions(+), 18 deletions(-) diff --git a/config/migrations.php b/config/migrations.php index 181fa0f..9b582f0 100644 --- a/config/migrations.php +++ b/config/migrations.php @@ -37,6 +37,23 @@ 'directory' => database_path('migrations'), /* |-------------------------------------------------------------------------- + | Migration Organize Directory + |-------------------------------------------------------------------------- + | + | Organize migrations file by directory. + | Possible values: "year", "year_and_month" and false + | + | false: + | directory/ + | "year": + | directory/2020/ + | "year_and_month": + | directory/2020/01/ + | + */ + 'organize_migrations' => false, + /* + |-------------------------------------------------------------------------- | Migration Namespace |-------------------------------------------------------------------------- | diff --git a/src/Configuration/ConfigurationFactory.php b/src/Configuration/ConfigurationFactory.php index a52aa21..2e23c91 100644 --- a/src/Configuration/ConfigurationFactory.php +++ b/src/Configuration/ConfigurationFactory.php @@ -63,6 +63,14 @@ public function make(Connection $connection, $name = null) $configuration->setMigrationsDirectory($directory); $configuration->registerMigrationsFromDirectory($directory); + if ($migrationOrganisation = $config->get('organize_migrations', false)) { + if (0 === strcasecmp($migrationOrganisation, Configuration::VERSIONS_ORGANIZATION_BY_YEAR)) { + $configuration->setMigrationsAreOrganizedByYear(); + } elseif (0 === strcasecmp($migrationOrganisation, Configuration::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH)) { + $configuration->setMigrationsAreOrganizedByYearAndMonth(); + } + } + return $configuration; } } diff --git a/tests/Configuration/ConfigurationFactoryTest.php b/tests/Configuration/ConfigurationFactoryTest.php index bb34b92..4a95b95 100644 --- a/tests/Configuration/ConfigurationFactoryTest.php +++ b/tests/Configuration/ConfigurationFactoryTest.php @@ -56,12 +56,13 @@ public function test_can_make_configuration() ->once() ->with('migrations.default', []) ->andReturn([ - 'name' => 'Doctrine Migrations', - 'namespace' => 'Database\\Migrations', - 'table' => 'migrations', - 'schema' => ['filter' => '/^(?).*$/'], - 'directory' => database_path('migrations'), - 'naming_strategy' => DefaultNamingStrategy::class, + 'name' => 'Doctrine Migrations', + 'namespace' => 'Database\\Migrations', + 'table' => 'migrations', + 'schema' => ['filter' => '/^(?).*$/'], + 'directory' => database_path('migrations'), + 'organize_migrations' => Configuration::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH, + 'naming_strategy' => DefaultNamingStrategy::class, ]) ; @@ -81,6 +82,8 @@ public function test_can_make_configuration() $this->assertEquals('migrations', $configuration->getMigrationsTableName()); $this->assertInstanceOf(DefaultNamingStrategy::class, $configuration->getNamingStrategy()); $this->assertEquals(database_path('migrations'), $configuration->getMigrationsDirectory()); + $this->assertEquals(true, $configuration->areMigrationsOrganizedByYear()); + $this->assertEquals(true, $configuration->areMigrationsOrganizedByYearAndMonth()); } public function test_can_make_configuration_for_custom_entity_manager() @@ -96,12 +99,13 @@ public function test_can_make_configuration_for_custom_entity_manager() ->once() ->with('migrations.custom_entity_manager', []) ->andReturn([ - 'name' => 'Migrations', - 'namespace' => 'Database\\Migrations\\Custom', - 'table' => 'migrations', - 'schema' => ['filter' => '/^(?!^(custom)$).*$/'], - 'directory' => database_path('migrations/custom'), - 'naming_strategy' => DefaultNamingStrategy::class, + 'name' => 'Migrations', + 'namespace' => 'Database\\Migrations\\Custom', + 'table' => 'migrations', + 'schema' => ['filter' => '/^(?!^(custom)$).*$/'], + 'directory' => database_path('migrations/custom'), + 'organize_migrations' => Configuration::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH, + 'naming_strategy' => DefaultNamingStrategy::class, ]) ; @@ -123,6 +127,8 @@ public function test_can_make_configuration_for_custom_entity_manager() $this->assertEquals('migrations', $configuration->getMigrationsTableName()); $this->assertInstanceOf(DefaultNamingStrategy::class, $configuration->getNamingStrategy()); $this->assertEquals(database_path('migrations/custom'), $configuration->getMigrationsDirectory()); + $this->assertEquals(true, $configuration->areMigrationsOrganizedByYear()); + $this->assertEquals(true, $configuration->areMigrationsOrganizedByYearAndMonth()); } public function test_returns_default_configuration_if_not_defined() @@ -138,12 +144,13 @@ public function test_returns_default_configuration_if_not_defined() ->once() ->with('migrations.default', []) ->andReturn([ - 'name' => 'Doctrine Migrations', - 'namespace' => 'Database\\Migrations', - 'table' => 'migrations', - 'schema' => ['filter' => '/^(?).*$/'], - 'directory' => database_path('migrations'), - 'naming_strategy' => DefaultNamingStrategy::class, + 'name' => 'Doctrine Migrations', + 'namespace' => 'Database\\Migrations', + 'table' => 'migrations', + 'schema' => ['filter' => '/^(?).*$/'], + 'directory' => database_path('migrations'), + 'organize_migrations' => Configuration::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH, + 'naming_strategy' => DefaultNamingStrategy::class, ]) ; @@ -162,6 +169,8 @@ public function test_returns_default_configuration_if_not_defined() $this->assertEquals('migrations', $configuration->getMigrationsTableName()); $this->assertInstanceOf(DefaultNamingStrategy::class, $configuration->getNamingStrategy()); $this->assertEquals(database_path('migrations'), $configuration->getMigrationsDirectory()); + $this->assertEquals(true, $configuration->areMigrationsOrganizedByYear()); + $this->assertEquals(true, $configuration->areMigrationsOrganizedByYearAndMonth()); } protected function tearDown()