Completed
Push — master ( 6ac724...b5c581 )
by Fumio
03:01
created

ServiceProvider   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 162
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 10

Test Coverage

Coverage 90.7%

Importance

Changes 26
Bugs 3 Features 9
Metric Value
c 26
b 3
f 9
dl 0
loc 162
rs 10
ccs 39
cts 43
cp 0.907
wmc 11
lcom 1
cbo 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
B register() 0 36 1
A registerClassResolvers() 0 8 1
A setupPackageCommands() 0 11 2
A registerAddons() 0 6 2
A boot() 0 8 1
A registerBladeExtensions() 0 6 1
A bootAddons() 0 7 2
A provides() 0 4 1
1
<?php
2
3
namespace LaravelPlus\Extension;
4
5
use Illuminate\Support\Facades\Blade;
6
use Jumilla\Addomnipot\Laravel\Environment as AddonEnvironment;
7
use Jumilla\Addomnipot\Laravel\ClassLoader as AddonClassLoader;
8
use Jumilla\Addomnipot\Laravel\Generator as AddonGenerator;
9
use Jumilla\Addomnipot\Laravel\AliasResolver;
10
use Jumilla\Addomnipot\Laravel\Repository;
11
use LaravelPlus\Extension\Templates\BladeExtension;
12
use Jumilla\Versionia\Laravel\Migrator;
13
14
class ServiceProvider extends \Illuminate\Support\ServiceProvider
15
{
16
    /**
17
     * Addon environment.
18
     *
19
     * @var \Jumilla\Addomnipot\Laravel\Environment
20
     */
21
    protected $addonEnvironment;
22
23
    /**
24
     * @var array
25
     */
26
    protected static $commands = [
27
// app:
28
        'command+.app.container' => Console\AppContainerCommand::class,
29
        'command+.app.route' => Console\RouteListCommand::class,
30
        'command+.app.tail' => Console\TailCommand::class,
31
// addon:
32
        'command+.addon.list' => Addons\Console\AddonListCommand::class,
33
        'command+.addon.status' => Addons\Console\AddonStatusCommand::class,
34
        'command+.addon.make' => Addons\Console\AddonMakeCommand::class,
35
        'command+.addon.name' => Addons\Console\AddonNameCommand::class,
36
        'command+.addon.remove' => Addons\Console\AddonRemoveCommand::class,
37
// database:
38
        'command+.database.status' => Database\Console\DatabaseStatusCommand::class,
39
        'command+.database.upgrade' => Database\Console\DatabaseUpgradeCommand::class,
40
        'command+.database.clean' => Database\Console\DatabaseCleanCommand::class,
41
        'command+.database.refresh' => Database\Console\DatabaseRefreshCommand::class,
42
        'command+.database.rollback' => Database\Console\DatabaseRollbackCommand::class,
43
        'command+.database.again' => Database\Console\DatabaseAgainCommand::class,
44
        'command+.database.seed' => Database\Console\DatabaseSeedCommand::class,
45
// hash:
46
        'command+.hash.make' => Console\HashMakeCommand::class,
47
        'command+.hash.check' => Console\HashCheckCommand::class,
48
    ];
49
50
    /**
51
     * @var array
52
     */
53
    protected $addons;
54
55
    /**
56
     * Register the service provider.
57
     */
58 1
    public function register()
59
    {
60 1
        $app = $this->app;
61
62
        // register spec path for app
63 1
        $app['path.specs'] = $app->basePath().'/resources/specs';
64
65
        // register spec repository
66
        $app->singleton('specs', function ($app) {
67
            $loader = new Repository\FileLoader($app['files'], $app['path.specs']);
68
69
            return new Repository\NamespacedRepository($loader);
70 1
        });
71
72
        // register addon environment
73 1
        $app->instance('addon', $this->addonEnvironment = new AddonEnvironment($app));
74 1
        $app->alias('addon', AddonEnvironment::class);
75
76
        // register addon generator
77
        $app->singleton('addon.generator', function ($app) {
78
            return new AddonGenerator();
79 1
        });
80 1
        $app->alias('addon.generator', AddonGenerator::class);
81
82
        // register database migrator
83
        $app->singleton('database.migrator', function ($app) {
84
            return new Migrator($app['db']);
85 1
        });
86 1
        $app->alias('database.migrator', Migrator::class);
87
88 1
        $this->registerClassResolvers();
89
90 1
        $this->setupPackageCommands(static::$commands);
91
92 1
        $this->registerAddons($this->addonEnvironment->addons());
93 1
    }
94
95
    /**
96
     */
97 1
    protected function registerClassResolvers()
98
    {
99 1
        $addons = $this->addonEnvironment->addons();
100
101 1
        AddonClassLoader::register($this->addonEnvironment, $addons);
102
103 1
        AliasResolver::register($this->app['path'], $addons, $this->app['config']->get('app.aliases'));
104 1
    }
105
106
    /**
107
     * setup package's commands.
108
     *
109
     * @param array $commands
110
     */
111 1
    protected function setupPackageCommands(array $commands)
112
    {
113 1
        foreach ($commands as $name => $class) {
114 1
            $this->app->singleton($name, function ($app) use ($class) {
115
                return $app->build($class);
116 1
            });
117
        }
118
119
        // Now register all the commands
120 1
        $this->commands(array_keys($commands));
121 1
    }
122
123
    /**
124
     * Register all addons.
125
     */
126 1
    public function registerAddons(array $addons)
127
    {
128 1
        foreach ($addons as $addon) {
129
            $addon->register($this->app);
130
        }
131 1
    }
132
133
    /**
134
     * Bootstrap the application events.
135
     */
136 1
    public function boot()
137
    {
138
        //
139 1
        $this->registerBladeExtensions();
140
141
        // setup all addons
142 1
        $this->bootAddons();
143 1
    }
144
145
    /**
146
     * register blade extensions.
147
     */
148 1
    protected function registerBladeExtensions()
149
    {
150 1
        Blade::extend(BladeExtension::comment());
151
152 1
        Blade::extend(BladeExtension::script());
153 1
    }
154
155
    /**
156
     * setup & boot addons.
157
     */
158 1
    protected function bootAddons()
159
    {
160 1
        foreach ($this->addonEnvironment->addons() as $name => $addon) {
161
            // boot addon
162
            $addon->boot($this->app);
163
        }
164 1
    }
165
166
    /**
167
     * Get the services provided by the provider.
168
     *
169
     * @return array
170
     */
171
    public function provides()
172
    {
173
        return array_keys(static::$commands);
174
    }
175
}
176