Skip to content

Commit 10a636c

Browse files
authored
Merge pull request #91 from FlashBlack/organize_migrations
Support option: organize_migrations
2 parents 30ab7c5 + 5c308c8 commit 10a636c

File tree

3 files changed

+52
-18
lines changed

3 files changed

+52
-18
lines changed

config/migrations.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,23 @@
3737
'directory' => database_path('migrations'),
3838
/*
3939
|--------------------------------------------------------------------------
40+
| Migration Organize Directory
41+
|--------------------------------------------------------------------------
42+
|
43+
| Organize migrations file by directory.
44+
| Possible values: "year", "year_and_month" and false
45+
|
46+
| false:
47+
| directory/
48+
| "year":
49+
| directory/2020/
50+
| "year_and_month":
51+
| directory/2020/01/
52+
|
53+
*/
54+
'organize_migrations' => false,
55+
/*
56+
|--------------------------------------------------------------------------
4057
| Migration Namespace
4158
|--------------------------------------------------------------------------
4259
|

src/Configuration/ConfigurationFactory.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ public function make(Connection $connection, $name = null)
6363
$configuration->setMigrationsDirectory($directory);
6464
$configuration->registerMigrationsFromDirectory($directory);
6565

66+
if ($migrationOrganisation = $config->get('organize_migrations', false)) {
67+
if (0 === strcasecmp($migrationOrganisation, Configuration::VERSIONS_ORGANIZATION_BY_YEAR)) {
68+
$configuration->setMigrationsAreOrganizedByYear();
69+
} elseif (0 === strcasecmp($migrationOrganisation, Configuration::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH)) {
70+
$configuration->setMigrationsAreOrganizedByYearAndMonth();
71+
}
72+
}
73+
6674
return $configuration;
6775
}
6876
}

tests/Configuration/ConfigurationFactoryTest.php

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,13 @@ public function test_can_make_configuration()
5656
->once()
5757
->with('migrations.default', [])
5858
->andReturn([
59-
'name' => 'Doctrine Migrations',
60-
'namespace' => 'Database\\Migrations',
61-
'table' => 'migrations',
62-
'schema' => ['filter' => '/^(?).*$/'],
63-
'directory' => database_path('migrations'),
64-
'naming_strategy' => DefaultNamingStrategy::class,
59+
'name' => 'Doctrine Migrations',
60+
'namespace' => 'Database\\Migrations',
61+
'table' => 'migrations',
62+
'schema' => ['filter' => '/^(?).*$/'],
63+
'directory' => database_path('migrations'),
64+
'organize_migrations' => Configuration::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH,
65+
'naming_strategy' => DefaultNamingStrategy::class,
6566
])
6667
;
6768

@@ -81,6 +82,8 @@ public function test_can_make_configuration()
8182
$this->assertEquals('migrations', $configuration->getMigrationsTableName());
8283
$this->assertInstanceOf(DefaultNamingStrategy::class, $configuration->getNamingStrategy());
8384
$this->assertEquals(database_path('migrations'), $configuration->getMigrationsDirectory());
85+
$this->assertEquals(true, $configuration->areMigrationsOrganizedByYear());
86+
$this->assertEquals(true, $configuration->areMigrationsOrganizedByYearAndMonth());
8487
}
8588

8689
public function test_can_make_configuration_for_custom_entity_manager()
@@ -96,12 +99,13 @@ public function test_can_make_configuration_for_custom_entity_manager()
9699
->once()
97100
->with('migrations.custom_entity_manager', [])
98101
->andReturn([
99-
'name' => 'Migrations',
100-
'namespace' => 'Database\\Migrations\\Custom',
101-
'table' => 'migrations',
102-
'schema' => ['filter' => '/^(?!^(custom)$).*$/'],
103-
'directory' => database_path('migrations/custom'),
104-
'naming_strategy' => DefaultNamingStrategy::class,
102+
'name' => 'Migrations',
103+
'namespace' => 'Database\\Migrations\\Custom',
104+
'table' => 'migrations',
105+
'schema' => ['filter' => '/^(?!^(custom)$).*$/'],
106+
'directory' => database_path('migrations/custom'),
107+
'organize_migrations' => Configuration::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH,
108+
'naming_strategy' => DefaultNamingStrategy::class,
105109
])
106110
;
107111

@@ -123,6 +127,8 @@ public function test_can_make_configuration_for_custom_entity_manager()
123127
$this->assertEquals('migrations', $configuration->getMigrationsTableName());
124128
$this->assertInstanceOf(DefaultNamingStrategy::class, $configuration->getNamingStrategy());
125129
$this->assertEquals(database_path('migrations/custom'), $configuration->getMigrationsDirectory());
130+
$this->assertEquals(true, $configuration->areMigrationsOrganizedByYear());
131+
$this->assertEquals(true, $configuration->areMigrationsOrganizedByYearAndMonth());
126132
}
127133

128134
public function test_returns_default_configuration_if_not_defined()
@@ -138,12 +144,13 @@ public function test_returns_default_configuration_if_not_defined()
138144
->once()
139145
->with('migrations.default', [])
140146
->andReturn([
141-
'name' => 'Doctrine Migrations',
142-
'namespace' => 'Database\\Migrations',
143-
'table' => 'migrations',
144-
'schema' => ['filter' => '/^(?).*$/'],
145-
'directory' => database_path('migrations'),
146-
'naming_strategy' => DefaultNamingStrategy::class,
147+
'name' => 'Doctrine Migrations',
148+
'namespace' => 'Database\\Migrations',
149+
'table' => 'migrations',
150+
'schema' => ['filter' => '/^(?).*$/'],
151+
'directory' => database_path('migrations'),
152+
'organize_migrations' => Configuration::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH,
153+
'naming_strategy' => DefaultNamingStrategy::class,
147154
])
148155
;
149156

@@ -162,6 +169,8 @@ public function test_returns_default_configuration_if_not_defined()
162169
$this->assertEquals('migrations', $configuration->getMigrationsTableName());
163170
$this->assertInstanceOf(DefaultNamingStrategy::class, $configuration->getNamingStrategy());
164171
$this->assertEquals(database_path('migrations'), $configuration->getMigrationsDirectory());
172+
$this->assertEquals(true, $configuration->areMigrationsOrganizedByYear());
173+
$this->assertEquals(true, $configuration->areMigrationsOrganizedByYearAndMonth());
165174
}
166175

167176
protected function tearDown()

0 commit comments

Comments
 (0)