Completed
Pull Request — stable (#354)
by Matt
04:09
created

Provider::boot()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 22
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 14
dl 0
loc 22
ccs 6
cts 6
cp 1
rs 9.7998
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * This file is part of Laravel Zero.
7
 *
8
 * (c) Nuno Maduro <[email protected]>
9
 *
10
 *  For the full copyright and license information, please view the LICENSE
11
 *  file that was distributed with this source code.
12
 */
13
14
namespace LaravelZero\Framework\Components\Database;
15
16
use function collect;
17
use function is_array;
18
use function class_exists;
19
use Illuminate\Support\Facades\File;
20
use LaravelZero\Framework\Components\AbstractComponentProvider;
21
22
/**
23
 * @internal
24
 */
25
class Provider extends AbstractComponentProvider
26
{
27
    /**
28
     * {@inheritdoc}
29
     */
30 32
    public function isAvailable(): bool
31
    {
32 32
        return class_exists(\Illuminate\Database\DatabaseServiceProvider::class) && is_array(
33 32
                $this->app['config']->get('database', false)
34
            );
35
    }
36
37
    /**
38
     * {@inheritdoc}
39
     */
40 32
    public function register(): void
41
    {
42 32
        if (File::exists($this->app->configPath('database.php'))) {
43 32
            $this->mergeConfigFrom($this->app->configPath('database.php'), 'database');
44
        }
45
46 32
        $this->registerDatabaseService();
47
48 32
        $this->registerMigrationService();
49 32
    }
50
51
    /**
52
     * {@inheritdoc}
53
     */
54 32
    public function boot(): void
55
    {
56 32
        if ($this->app->environment() !== 'production') {
57 32
            $this->commands(
58
                [
59 32
                    \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class,
60
                    \Illuminate\Database\Console\Seeds\SeederMakeCommand::class,
61
                    \Illuminate\Foundation\Console\ModelMakeCommand::class,
62
                    \Illuminate\Database\Console\Seeds\SeedCommand::class,
63
                ]
64
            );
65
        }
66
67 32
        $this->commands(
68
            [
69 32
                \Illuminate\Database\Console\Migrations\FreshCommand::class,
70
                \Illuminate\Database\Console\Migrations\InstallCommand::class,
71
                \Illuminate\Database\Console\Migrations\MigrateCommand::class,
72
                \Illuminate\Database\Console\Migrations\RefreshCommand::class,
73
                \Illuminate\Database\Console\Migrations\ResetCommand::class,
74
                \Illuminate\Database\Console\Migrations\RollbackCommand::class,
75
                \Illuminate\Database\Console\Migrations\StatusCommand::class,
76
            ]
77
        );
78 32
    }
79
80
    /**
81
     * Registers the database service.
82
     *
83
     * Makes this Capsule Instance available globally via static methods.
84
     */
85 32
    protected function registerDatabaseService(): void
86
    {
87 32
        $this->app->alias('db', \Illuminate\Database\ConnectionResolverInterface::class);
88 32
        $this->app->register(\Illuminate\Database\DatabaseServiceProvider::class);
89
90 32
        if (File::exists($this->app->databasePath('seeds'))) {
91
            collect(File::files($this->app->databasePath('seeds')))->each(
92
                function ($file) {
93
                    File::requireOnce($file);
94
                }
95
            );
96
        }
97 32
    }
98
99
    /**
100
     * Registers the migration service.
101
     */
102 32
    protected function registerMigrationService(): void
103
    {
104 32
        $config = $this->app['config'];
105 32
        $config->set('database.migrations', $config->get('database.migrations') ?: 'migrations');
106 32
        $this->app->register(\Illuminate\Database\MigrationServiceProvider::class);
107
108 32
        $this->app->alias(
109 32
            'migration.repository',
110 32
            \Illuminate\Database\Migrations\MigrationRepositoryInterface::class
111
        );
112
113 32
        $this->app->singleton(
114 32
            'migrator',
115
            function ($app) {
116 32
                $repository = $app['migration.repository'];
117
118 32
                return new Migrator($repository, $app['db'], $app['files']);
119 32
            }
120
        );
121
122 32
        $this->app->alias(
123 32
            'migrator',
124 32
            \Illuminate\Database\Migrations\Migrator::class
125
        );
126 32
    }
127
}
128