Passed
Pull Request — stable (#370)
by
unknown
02:20
created

Provider   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 111
Duplicated Lines 0 %

Test Coverage

Coverage 86.67%

Importance

Changes 5
Bugs 0 Features 0
Metric Value
wmc 12
eloc 48
dl 0
loc 111
ccs 39
cts 45
cp 0.8667
rs 10
c 5
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A register() 0 9 2
A registerDatabaseService() 0 17 3
A boot() 0 24 2
A registerMigrationService() 0 24 2
A isAvailable() 0 5 3
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 class_exists;
17
use function collect;
18
use Illuminate\Support\Facades\File;
19
use function is_array;
20
use LaravelZero\Framework\Components\AbstractComponentProvider;
21
22
/**
23
 * @internal
24
 */
25
class Provider extends AbstractComponentProvider
26
{
27
    /**
28
     * {@inheritdoc}
29
     */
30 36
    public function isAvailable(): bool
31
    {
32 36
        return class_exists(\Illuminate\Database\DatabaseServiceProvider::class)
33 36
            && is_array($this->app['config']->get('database', false))
34 36
            && $this->app['config']->get('database.useDefaultProvider', true) === true;
35
    }
36
37
    /**
38
     * {@inheritdoc}
39
     */
40 36
    public function register(): void
41
    {
42 36
        if (File::exists($this->app->configPath('database.php'))) {
43 36
            $this->mergeConfigFrom($this->app->configPath('database.php'), 'database');
44
        }
45
46 36
        $this->registerDatabaseService();
47
48 36
        $this->registerMigrationService();
49 36
    }
50
51
    /**
52
     * {@inheritdoc}
53
     */
54 36
    public function boot(): void
55
    {
56 36
        if ($this->app->environment() !== 'production') {
57 36
            $this->commands(
58
                [
59 36
                    \Illuminate\Database\Console\Migrations\MigrateMakeCommand::class,
60
                    \Illuminate\Database\Console\Factories\FactoryMakeCommand::class,
61
                    \Illuminate\Database\Console\Seeds\SeederMakeCommand::class,
62
                    \Illuminate\Foundation\Console\ModelMakeCommand::class,
63
                    \Illuminate\Database\Console\Seeds\SeedCommand::class,
64
                ]
65
            );
66
        }
67
68 36
        $this->commands(
69
            [
70 36
                \Illuminate\Database\Console\Migrations\FreshCommand::class,
71
                \Illuminate\Database\Console\Migrations\InstallCommand::class,
72
                \Illuminate\Database\Console\Migrations\MigrateCommand::class,
73
                \Illuminate\Database\Console\Migrations\RefreshCommand::class,
74
                \Illuminate\Database\Console\Migrations\ResetCommand::class,
75
                \Illuminate\Database\Console\Migrations\RollbackCommand::class,
76
                \Illuminate\Database\Console\Migrations\StatusCommand::class,
77
                \Illuminate\Database\Console\WipeCommand::class,
78
            ]
79
        );
80 36
    }
81
82
    /**
83
     * Registers the database service.
84
     *
85
     * Makes this Capsule Instance available globally via static methods.
86
     */
87 36
    protected function registerDatabaseService(): void
88
    {
89 36
        $this->app->alias('db', \Illuminate\Database\ConnectionResolverInterface::class);
90 36
        $this->app->register(\Illuminate\Database\DatabaseServiceProvider::class);
91
92 36
        if (File::exists($this->app->databasePath('seeds'))) {
93
            collect(File::files($this->app->databasePath('seeds')))->each(
94
                function ($file) {
95
                    File::requireOnce($file);
96
                }
97
            );
98
        }
99
100 36
        if (File::exists($this->app->databasePath('factories'))) {
101
            collect(File::files($this->app->databasePath('factories')))->each(
102
                function ($file) {
103
                    File::requireOnce($file);
104
                }
105
            );
106
        }
107 36
    }
108
109
    /**
110
     * Registers the migration service.
111
     */
112 36
    protected function registerMigrationService(): void
113
    {
114 36
        $config = $this->app['config'];
115 36
        $config->set('database.migrations', $config->get('database.migrations') ?: 'migrations');
116 36
        $this->app->register(\Illuminate\Foundation\Providers\ComposerServiceProvider::class);
117 36
        $this->app->register(\Illuminate\Database\MigrationServiceProvider::class);
118
119 36
        $this->app->alias(
120 36
            'migration.repository',
121 36
            \Illuminate\Database\Migrations\MigrationRepositoryInterface::class
122
        );
123
124 36
        $this->app->singleton(
125 36
            'migrator',
126
            function ($app) {
127 36
                $repository = $app['migration.repository'];
128
129 36
                return new Migrator($repository, $app['db'], $app['files']);
130 36
            }
131
        );
132
133 36
        $this->app->alias(
134 36
            'migrator',
135 36
            \Illuminate\Database\Migrations\Migrator::class
136
        );
137 36
    }
138
}
139