Completed
Push — master ( e44963...61f78e )
by ARCANEDEV
13s queued 10s
created

SettingsServiceProvider::boot()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3.0261

Importance

Changes 0
Metric Value
cc 3
nc 4
nop 0
dl 0
loc 10
ccs 6
cts 7
cp 0.8571
crap 3.0261
rs 9.9332
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Arcanedev\LaravelSettings;
6
7
use Arcanedev\LaravelSettings\Contracts\Manager as ManagerContract;
8
use Arcanedev\LaravelSettings\Contracts\Store as StoreContract;
9
use Arcanedev\Support\Providers\PackageServiceProvider;
10
use Illuminate\Contracts\Support\DeferrableProvider;
11
12
/**
13
 * Class     SettingsServiceProvider
14
 *
15
 * @author   ARCANEDEV <[email protected]>
16
 */
17
class SettingsServiceProvider extends PackageServiceProvider implements DeferrableProvider
18
{
19
    /* -----------------------------------------------------------------
20
     |  Properties
21
     | -----------------------------------------------------------------
22
     */
23
24
    /**
25
     * Package name.
26
     *
27
     * @var string
28
     */
29
    protected $package = 'settings';
30
31
    /* -----------------------------------------------------------------
32
     |  Main Methods
33
     | -----------------------------------------------------------------
34
     */
35
36
    /**
37
     * Register the service provider.
38
     */
39 288
    public function register(): void
40
    {
41 288
        parent::register();
42
43 288
        $this->registerConfig();
44
45 288
        $this->registerSettingsManager();
46 288
    }
47
48
    /**
49
     * Boot the service provider.
50
     */
51 288
    public function boot(): void
52
    {
53 288
        SettingsManager::$runsMigrations
54 288
            ? $this->loadMigrations()
55
            : $this->publishMigrations();
56
57 288
        if ($this->app->runningInConsole()) {
58 288
            $this->publishConfig();
59
        }
60 288
    }
61
62
    /**
63
     * Get the services provided by the provider.
64
     *
65
     * @return array
66
     */
67 12
    public function provides(): array
68
    {
69
        return [
70 12
            ManagerContract::class,
71
            StoreContract::class,
72
        ];
73
    }
74
75
    /* -----------------------------------------------------------------
76
     |  Other Methods
77
     | -----------------------------------------------------------------
78
     */
79
80
    /**
81
     * Register the Settings Manager & Store drivers.
82
     */
83 288
    private function registerSettingsManager(): void
84
    {
85 288
        $this->singleton(ManagerContract::class, SettingsManager::class);
86
87 96
        $this->app->extend(ManagerContract::class, function (ManagerContract $manager, $app) {
88 270
            foreach ($app['config']->get('settings.drivers', []) as $driver => $params) {
89 270
                $manager->registerStore($driver, $params);
90
            }
91
92 270
            return $manager;
93 288
        });
94
95 96
        $this->singleton(StoreContract::class, function ($app): StoreContract {
96 30
            return $app[ManagerContract::class]->driver();
97 288
        });
98 288
    }
99
}
100