Completed
Push — master ( a22e9e...e46580 )
by Fumio
10:04
created

ServiceProvider::setupPackageCommands()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2.0078

Importance

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