-
Notifications
You must be signed in to change notification settings - Fork 1
/
bootstrap.php
60 lines (45 loc) · 1.99 KB
/
bootstrap.php
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
56
57
58
59
60
<?php
require_once __DIR__.'/vendor/autoload.php';
$config_file_path = getcwd() . DIRECTORY_SEPARATOR . 'exodus.yml';
$templates_file_path = '.' . DIRECTORY_SEPARATOR . 'templates';
$output = new \Symfony\Component\Console\Output\ConsoleOutput();
$file_handler = new \Exodus\File\Handler();
$templates = new \Exodus\Config\Templates($templates_file_path);
try {
// Create the config file if it doesn't exist
if (!$file_handler->fileExists($config_file_path)) {
// Copy the config file template into the user's project
$file_handler->copy(
$templates->getConfigFilePath(),
$config_file_path
);
$output->writeln('<info>Created exodus.yml file.</info>');
}
// Instantiate object for exodus.yml
$config_file = new \Exodus\Config\ConfigFile([
'contents' => \Symfony\Component\Yaml\Yaml::parse(
$file_handler->fileGetContents($config_file_path)
),
'db_adapter_factory' => new \Exodus\Database\Adapter\Factory()
]);
// The engine is responsible for abstracting away specific database implementation details
// and controls the flow of how migrations are created and executed.
$engine = new \Exodus\Engine([
'strategy' => \Exodus\Database\Strategy\Factory::getStrategy(
$config_file->getDbAdapter(),
$config_file->getMigrationTable()
),
'config_file' => $config_file,
'file_handler' => $file_handler
]);
} catch (\Exception $e) {
// Pretty print console error
$output->writeln('<error>' . $e->getMessage() . '</error>');
// Terminate bootstrapping
exit;
}
// Register Commands
$application = new \Symfony\Component\Console\Application('Exodus Migrations CLI');
$application->add(new \Exodus\Command\MakeMigrationCommand(['config_file' => $config_file,'templates' => $templates]));
$application->add(new \Exodus\Command\MigrateCommand($engine));
$application->add(new \Exodus\Command\RollbackCommand($engine));