Passed
Pull Request — master (#721)
by Florian
06:36
created

AdminLteServiceProvider::loadComponents()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 51
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 2.0023

Importance

Changes 5
Bugs 0 Features 0
Metric Value
cc 2
eloc 32
c 5
b 0
f 0
nc 2
nop 0
dl 0
loc 51
ccs 11
cts 12
cp 0.9167
crap 2.0023
rs 9.408

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace JeroenNoten\LaravelAdminLte;
4
5
use Illuminate\Contracts\Config\Repository;
6
use Illuminate\Contracts\Container\Container;
7
use Illuminate\Contracts\Events\Dispatcher;
8
use Illuminate\Contracts\View\Factory;
9
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
10
use JeroenNoten\LaravelAdminLte\Console\AdminLteInstallCommand;
11
use JeroenNoten\LaravelAdminLte\Console\AdminLtePluginCommand;
12
use JeroenNoten\LaravelAdminLte\Console\AdminLteStatusCommand;
13
use JeroenNoten\LaravelAdminLte\Console\AdminLteUpdateCommand;
14
use JeroenNoten\LaravelAdminLte\Events\BuildingMenu;
15
use JeroenNoten\LaravelAdminLte\Http\ViewComposers\AdminLteComposer;
16
17
class AdminLteServiceProvider extends BaseServiceProvider
18
{
19
    /**
20
     * Register the package services.
21
     *
22
     * @return void
23
     */
24 49
    public function register()
25
    {
26
        // Bind a singleton instance of the AdminLte class into the service
27
        // container.
28
29
        $this->app->singleton(AdminLte::class, function (Container $app) {
30 3
            return new AdminLte(
31 3
                $app['config']['adminlte.filters'],
32 3
                $app['events'],
33
                $app
34
            );
35 49
        });
36 49
    }
37
38
    /**
39
     * Bootstrap the package's services.
40
     *
41
     * @return void
42
     */
43 49
    public function boot(Factory $view, Dispatcher $events, Repository $config)
44
    {
45 49
        $this->loadViews();
46 49
        $this->loadTranslations();
47 49
        $this->loadConfig();
48 49
        $this->registerCommands();
49 49
        $this->registerViewComposers($view);
50 49
        $this->registerMenu($events, $config);
51 49
        $this->loadComponents();
52 49
    }
53
54
    /**
55
     * Load the package views.
56
     *
57
     * @return void
58
     */
59 49
    private function loadViews()
60
    {
61 49
        $viewsPath = $this->packagePath('resources/views');
62 49
        $this->loadViewsFrom($viewsPath, 'adminlte');
63 49
    }
64
65
    /**
66
     * Load the package translations.
67
     *
68
     * @return void
69
     */
70 49
    private function loadTranslations()
71
    {
72 49
        $translationsPath = $this->packagePath('resources/lang');
73 49
        $this->loadTranslationsFrom($translationsPath, 'adminlte');
74 49
    }
75
76
    /**
77
     * Load the package config.
78
     *
79
     * @return void
80
     */
81 49
    private function loadConfig()
82
    {
83 49
        $configPath = $this->packagePath('config/adminlte.php');
84 49
        $this->mergeConfigFrom($configPath, 'adminlte');
85 49
    }
86
87
    /**
88
     * Get the absolute path to some package resource.
89
     *
90
     * @param string $path The relative path to the resource
91
     * @return string
92
     */
93 49
    private function packagePath($path)
94
    {
95 49
        return __DIR__."/../$path";
96
    }
97
98
    /**
99
     * Register the package's artisan commands.
100
     *
101
     * @return void
102
     */
103 49
    private function registerCommands()
104
    {
105 49
        $this->commands([
106 49
            AdminLteInstallCommand::class,
107
            AdminLteStatusCommand::class,
108
            AdminLteUpdateCommand::class,
109
            AdminLtePluginCommand::class,
110
        ]);
111 49
    }
112
113
    /**
114
     * Register the package's view composers.
115
     *
116
     * @return void
117
     */
118 49
    private function registerViewComposers(Factory $view)
119
    {
120 49
        $view->composer('adminlte::page', AdminLteComposer::class);
121 49
    }
122
123
    /**
124
     * Register the menu events handlers.
125
     *
126
     * @return void
127
     */
128 49
    private static function registerMenu(Dispatcher $events, Repository $config)
129
    {
130
        // Register a handler for the BuildingMenu event, this handler will add
131
        // the menu defined on the config file to the menu builder instance.
132
133 49
        $events->listen(
134 49
            BuildingMenu::class,
135
            function (BuildingMenu $event) use ($config) {
136 1
                $menu = $config->get('adminlte.menu', []);
137 1
                $menu = is_array($menu) ? $menu : [];
138 1
                $event->menu->add(...$menu);
139 49
            }
140
        );
141 49
    }
142
143
    /**
144
     * Load the blade view components.
145
     *
146
     * @return void
147
     */
148 49
    private function loadComponents()
149
    {
150
        // Support of x-components is only available for Laravel >= 7.x
151
        // versions. So, we check if we can load components.
152
153 49
        $canLoadComponents = method_exists(
154 49
            'Illuminate\Support\ServiceProvider',
155 49
            'loadViewComponentsAs'
156
        );
157
158 49
        if (! $canLoadComponents) {
159
            return;
160
        }
161
162
        // Form components.
163
164 49
        $this->loadViewComponentsAs('adminlte', [
165 49
            Components\Button::class,
166
            Components\DateRange::class,
167
            Components\Input::class,
168
            Components\InputColor::class,
169
            Components\InputDate::class,
170
            Components\InputFile::class,
171
            Components\InputSlider::class,
172
            Components\InputSwitch::class,
173
            Components\Select::class,
174
            Components\Select2::class,
175
            Components\SelectBs::class,
176
            Components\Textarea::class,
177
            Components\TextEditor::class,
178
        ]);
179
180
        // Tool components.
181
182 49
        $this->loadViewComponentsAs('adminlte', [
183 49
            Components\Datatable::class,
184
            Components\Modal::class,
185
        ]);
186
187
        // Widgets components.
188
189 49
        $this->loadViewComponentsAs('adminlte', [
190 49
            Components\Alert::class,
191
            Components\Callout::class,
192
            Components\Card::class,
193
            Components\InfoBox::class,
194
            Components\ProfileColItem::class,
195
            Components\ProfileRowItem::class,
196
            Components\ProfileWidget::class,
197
            Components\Progress::class,
198
            Components\SmallBox::class,
199
        ]);
200 49
    }
201
}
202