Completed
Pull Request — master (#25)
by ARCANEDEV
03:22
created

SettingsServiceProvider::provides()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

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