Completed
Push — master ( 78b3b4...1185ef )
by Fumio
02:21
created

Generator::generateUiSample()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 73
Code Lines 48

Duplication

Lines 10
Ratio 13.7 %

Code Coverage

Tests 47
CRAP Score 2.0002

Importance

Changes 0
Metric Value
cc 2
eloc 48
nc 2
nop 2
dl 10
loc 73
ccs 47
cts 49
cp 0.9592
crap 2.0002
rs 9.0675
c 0
b 0
f 0

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 Jumilla\Addomnipot\Laravel;
4
5
use Jumilla\Generators\Php\Constant;
6
use Jumilla\Generators\Php\ClassName;
7
use Jumilla\Generators\FileGenerator;
8
9 1
const ADDON_VERSION = 5;
10
11
class Generator
12
{
13 39
    public function __construct() {
14 39
        $this->DEFAULTS = [
0 ignored issues
show
Bug introduced by
The property DEFAULTS does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
15 39
            'namespace' => '',
16
            'directories' => [
17
                // path
18 39
            ],
19
            'files' => [
20
                // path
21 39
            ],
22
            'paths' => [
23
                // role => path
24 39
            ],
25
            'providers' => [
26
                // class
27 39
            ],
28
            'console' => [
29
                'commands' => [
30
                    // class
31 39
                ],
32 39
            ],
33
            'http' => [
34
                'middlewares' => [
35
                    // class
36 39
                ],
37
                'route_middlewares' => [
38
                    // name => class
39 39
                ],
40 39
            ],
41
            'routes' => [
42 39
            ],
43 39
            'includes_global_aliases' => true,
44
            'aliases' => [
45
                // name => class
46 39
            ],
47
        ];
48 39
    }
49
50
    /**
51
     * @param string $path
52
     * @param string $type
53
     * @param array  $properties
54
     */
55 21
    public function generateAddon($path, $type, array $properties)
56
    {
57 21
        $generator = FileGenerator::make($path, __DIR__.'/../stubs/'.$type);
58
59 21
        $method = 'generate'.studly_case($type);
60
61 21
        call_user_func([$this, $method], $generator, $properties);
62 21
    }
63
64 10
    protected function generateMinimum(FileGenerator $generator, array $properties)
65
    {
66 10
        $this->generateAddonConfig($generator, $properties['namespace'], [
67 10
            'namespace' => new Constant('__NAMESPACE__'),
68 10
        ]);
69 10
    }
70
71 2
    protected function generateSimple(FileGenerator $generator, array $properties)
72
    {
73
        $generator->directory('classes', function ($generator) use ($properties) {
74 2
            $generator->directory('Providers')
75 2
                ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties);
76 2
            $generator->directory('Providers')
77 2
                ->file('RouteServiceProvider.php')->template('RouteServiceProvider.php', $properties);
78
79 2
            $generator->keepDirectory('Controllers');
80
81 2
            $generator->keepDirectory('Services');
82 2
        });
83
84 2
        $generator->keepDirectory('config');
85
86
        $this->generateLang($generator, $properties, function ($generator) use ($properties) {
87 2
            $generator->gitKeepFile();
88 2
        });
89
90 2
        $generator->keepDirectory('views');
91
92 2
        $generator->phpBlankFile('helpers.php');
93 2
        $generator->phpBlankFile('routes.php');
94
95 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
96 2
            'namespace' => new Constant('__NAMESPACE__'),
97
            'directories' => [
98 2
                'classes',
99 2
            ],
100
            'files' => [
101 2
                'helpers.php',
102 2
            ],
103
            'paths' => [
104 2
                'config' => 'config',
105 2
                'lang' => 'lang',
106 2
                'views' => 'views',
107 2
            ],
108
            'providers' => [
109 2
                new ClassName('Providers\AddonServiceProvider'),
110 2
                new ClassName('Providers\RouteServiceProvider'),
111 2
            ],
112
            'http' => [
113
                'middlewares' => [
114 2
                ],
115
                'route_middlewares' => [
116 2
                ],
117 2
            ],
118
            'routes' => [
119 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
120 2
                'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"),
121 2
                'middleware' => [],
122
                'files' => [
123
                    'routes.php'
124 2
                ],
125 2
            ],
126 2
        ], $this->DEFAULTS);
127 2
    }
128
129 1
    protected function generateAsset(FileGenerator $generator, array $properties)
130
    {
131
        $generator->directory('assets', function ($generator) use ($properties) {
0 ignored issues
show
Unused Code introduced by
The parameter $generator is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
132 1
        });
133
134 1
        $generator->file('gulpfile.js')->template('gulpfile.js', $properties);
135
136 1
        $this->generateAddonConfig($generator, $properties['namespace'], [
137
            'paths' => [
138 1
                'assets' => 'assets',
139 1
            ],
140 1
        ]);
141 1
    }
142
143 2
    protected function generateLibrary(FileGenerator $generator, array $properties)
144
    {
145
        $generator->directory('classes', function ($generator) use ($properties) {
146 2
            $migration_class = $properties['addon_class'].'_1_0';
147
148 2
            $generator->directory('Providers')
149 2
                ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties);
150 2
            $generator->directory('Providers')
151 2
                ->file('DatabaseServiceProvider.php')->template('DatabaseServiceProvider.php', array_merge($properties, ['migration_class_name' => $migration_class]));
152
153 2
            $generator->keepDirectory('Commands');
154
155 2
            $generator->directory('Migrations')
156 2
                ->file($migration_class.'.php')->template('Migration.php', array_merge($properties, ['class_name' => $migration_class]));
157 2
            $generator->keepDirectory('Seeds');
158
159 2
            $generator->keepDirectory('Services');
160 2
        });
161
162 2
        $generator->keepDirectory('config');
163
164
        $this->generateLang($generator, $properties, function ($generator) use ($properties) {
165 2
            $generator->phpConfigFile('messages.php', []);
166 2
        });
167
168
        $generator->directory('tests', function ($generator) use ($properties) {
169 2
            $generator->file('TestCase.php')->template('TestCase.php', $properties);
170 2
        });
171
172 2
        $generator->phpBlankFile('helpers.php');
173
174 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
175 2
            'namespace' => new Constant('__NAMESPACE__'),
176
            'directories' => [
177 2
                'classes',
178 2
            ],
179
            'files' => [
180 2
                'helpers.php',
181 2
            ],
182
            'paths' => [
183 2
                'config' => 'config',
184 2
                'lang' => 'lang',
185 2
                'tests' => 'tests',
186 2
            ],
187
            'providers' => [
188 2
                new ClassName('Providers\AddonServiceProvider'),
189 2
                new ClassName('Providers\DatabaseServiceProvider'),
190 2
            ],
191 2
        ], $this->DEFAULTS);
192 2
    }
193
194 3
    protected function generateApi(FileGenerator $generator, array $properties)
195
    {
196
        $generator->directory('classes', function ($generator) use ($properties) {
197 2
            $generator->directory('Providers')
198 2
                ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties);
199 2
            $generator->directory('Providers')
200 2
                ->file('RouteServiceProvider.php')->template('RouteServiceProvider.php', $properties);
201
202 2
            $generator->keepDirectory('Commands');
203
204 2
            $generator->directory('Controllers')
205 2
                ->file('Controller.php')->template('Controller.php', $properties);
206 2
            $generator->keepDirectory('Middleware');
207
208 2
            $generator->keepDirectory('Services');
209 2
        });
210
211 2
        $generator->keepDirectory('config');
212
213
        $this->generateLang($generator, $properties, function ($generator) use ($properties) {
214 2
            $generator->phpConfigFile('messages.php', []);
215 2
            $generator->phpConfigFile('vocabulary.php', []);
216 2
            $generator->phpConfigFile('methods.php', []);
217 2
        });
218
219 2
        $generator->directory('specs')->phpConfigFile('methods.php', []);
220
221
        $generator->directory('tests', function ($generator) use ($properties) {
222 2
            $generator->file('TestCase.php')->template('TestCase.php', $properties);
223 2
        });
224
225 2
        $generator->phpBlankFile('helpers.php');
226 2
        $generator->file('routes.php')->template('routes.php', $properties);
227
228 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
229 2
            'namespace' => new Constant('__NAMESPACE__'),
230
            'directories' => [
231 2
                'classes',
232 2
            ],
233
            'files' => [
234 2
                'helpers.php',
235 2
            ],
236
            'paths' => [
237 2
                'config' => 'config',
238 2
                'lang' => 'lang',
239 2
                'specs' => 'specs',
240 2
                'tests' => 'tests',
241 2
            ],
242
            'providers' => [
243 2
                new ClassName('Providers\AddonServiceProvider'),
244 2
                new ClassName('Providers\RouteServiceProvider'),
245 2
            ],
246
            'http' => [
247
                'middlewares' => [
248 3
                ],
249
                'route_middlewares' => [
250 2
                ],
251 2
            ],
252
            'routes' => [
253 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
254 2
                'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"),
255 2
                'middleware' => ['api'],
256
                'files' => [
257
                    'routes.php'
258 2
                ],
259 2
            ],
260 2
        ], $this->DEFAULTS);
261 2
    }
262
263 4
    protected function generateUi(FileGenerator $generator, array $properties)
264
    {
265 View Code Duplication
        $generator->directory('classes', function ($generator) use ($properties) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
266 4
            $migration_class = $properties['addon_class'].'_1_0';
267
268 4
            $generator->templateDirectory('Controllers', $properties);
269 4
            $generator->keepDirectory('Middleware');
270
271 4
            $generator->templateDirectory('Providers', array_merge($properties, ['migration_class_name' => $migration_class]));
272
273 4
            $generator->keepDirectory('Services');
274 4
        });
275
276 4
        $generator->keepDirectory('config');
277
278 4
        $generator->keepDirectory('assets');
279
280
        $this->generateLang($generator, $properties, function ($generator) use ($properties) {
281 4
            $generator->phpConfigFile('messages.php', []);
282 4
            $generator->phpConfigFile('vocabulary.php', []);
283 4
            $generator->phpConfigFile('forms.php', []);
284 4
        });
285
286 4
        $generator->directory('specs')->phpConfigFile('forms.php', []);
287
288 4
        $generator->templateDirectory('views', $properties);
289
290 4
        $generator->templateDirectory('tests', $properties);
291
292 4
        $generator->phpBlankFile('helpers.php');
293 4
        $generator->templateFile('routes.php', $properties);
294
295 4
        $this->generateAddonConfig($generator, $properties['namespace'], [
296 4
            'namespace' => new Constant('__NAMESPACE__'),
297
            'directories' => [
298 4
                'classes',
299 4
            ],
300
            'files' => [
301 4
                'helpers.php',
302 4
            ],
303
            'paths' => [
304 4
                'config' => 'config',
305 4
                'assets' => 'assets',
306 4
                'lang' => 'lang',
307 4
                'specs' => 'specs',
308 4
                'views' => 'views',
309 4
                'tests' => 'tests',
310 4
            ],
311
            'providers' => [
312 4
                new ClassName('Providers\AddonServiceProvider'),
313 4
                new ClassName('Providers\RouteServiceProvider'),
314 4
            ],
315
            'http' => [
316
                'middlewares' => [
317 4
                ],
318
                'route_middlewares' => [
319 4
                ],
320 4
            ],
321
            'routes' => [
322 4
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
323 4
                'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"),
324 4
                'namespace' => new Constant("__NAMESPACE__.'\\Controllers'"),
325 4
                'middleware' => ['web'],
326
                'files' => [
327
                    'routes.php'
328 4
                ],
329 4
            ],
330 4
        ], $this->DEFAULTS);
331 4
    }
332
333 2
    protected function generateUiSample(FileGenerator $generator, array $properties)
334
    {
335 View Code Duplication
        $generator->directory('classes', function ($generator) use ($properties) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
336 2
            $migration_class = $properties['addon_class'].'_1_0';
337
338 2
            $generator->templateDirectory('Controllers', $properties);
339 2
            $generator->keepDirectory('Middleware');
340
341 2
            $generator->templateDirectory('Providers', array_merge($properties, ['migration_class_name' => $migration_class]));
342
343 2
            $generator->keepDirectory('Services');
344 2
        });
345
346 2
        $generator->keepDirectory('config');
347
348 2
        $generator->keepDirectory('assets');
349
350
        $this->generateLang($generator, $properties, function ($generator) use ($properties) {
351 2
            $generator->phpConfigFile('messages.php', []);
352 2
            $generator->phpConfigFile('vocabulary.php', []);
353 2
            $generator->phpConfigFile('forms.php', []);
354 2
        });
355 2
        $generator->directory('lang/en')->file('messages.php')->template('lang/en-messages.php', $properties);
356 2
        if (in_array('ja', $properties['languages'])) {
357
            $generator->directory('lang/ja')->file('messages.php')->template('lang/ja-messages.php', $properties);
358
        }
359
360 2
        $generator->directory('specs')->phpConfigFile('forms.php', []);
361
362 2
        $generator->templateDirectory('views', $properties);
363
364 2
        $generator->templateDirectory('tests', $properties);
365
366 2
        $generator->phpBlankFile('helpers.php');
367 2
        $generator->templateFile('routes.php', $properties);
368
369 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
370 2
            'namespace' => new Constant('__NAMESPACE__'),
371
            'directories' => [
372 2
                'classes',
373 2
            ],
374
            'files' => [
375 2
                'helpers.php',
376 2
            ],
377
            'paths' => [
378 2
                'config' => 'config',
379 2
                'assets' => 'assets',
380 2
                'lang' => 'lang',
381 2
                'specs' => 'specs',
382 2
                'views' => 'views',
383 2
                'tests' => 'tests',
384 2
            ],
385
            'providers' => [
386 2
                new ClassName('Providers\AddonServiceProvider'),
387 2
                new ClassName('Providers\RouteServiceProvider'),
388 2
            ],
389
            'http' => [
390
                'middlewares' => [
391 2
                ],
392
                'route_middlewares' => [
393 2
                ],
394 2
            ],
395
            'routes' => [
396 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
397 2
                'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"),
398 2
                'namespace' => new Constant("__NAMESPACE__.'\\Controllers'"),
399 2
                'middleware' => ['web'],
400
                'files' => [
401
                    'routes.php'
402 2
                ],
403 2
            ],
404 2
        ], $this->DEFAULTS);
405 2
    }
406
407 2
    protected function generateDebug(FileGenerator $generator, array $properties)
408
    {
409
        $generator->directory('classes', function ($generator) use ($properties) {
410 2
            $generator->directory('Providers')
411 2
                ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties);
412 2
            $generator->directory('Providers')
413 2
                ->file('RouteServiceProvider.php')->template('RouteServiceProvider.php', $properties);
414
415 2
            $generator->keepDirectory('Commands');
416
417 2
            $generator->directory('Controllers')
418 2
                ->file('Controller.php')->template('Controller.php', $properties);
419 2
            $generator->directory('Controllers')
420 2
                ->file('DebugController.php')->template('DebugController.php', $properties);
421 2
            $generator->keepDirectory('Middleware');
422
423 2
            $generator->keepDirectory('Services');
424 2
        });
425
426 2
        $generator->keepDirectory('config');
427
428
        $this->generateLang($generator, $properties, function ($generator) use ($properties) {
429 2
            $generator->phpConfigFile('messages.php', []);
430 2
            $generator->phpConfigFile('vocabulary.php', []);
431 2
            $generator->phpConfigFile('forms.php', []);
432 2
            $generator->phpConfigFile('methods.php', []);
433 2
        });
434
435 2
        $generator->directory('specs')->phpConfigFile('forms.php', []);
436 2
        $generator->directory('specs')->phpConfigFile('methods.php', []);
437
438 2
        $generator->directory('views')
439 2
            ->file('index.blade.php')->template('index.blade.php', $properties);
440 2
        $generator->directory('views')
441 2
            ->file('layout.blade.php')->template('layout.blade.php', $properties);
442
443 2
        $generator->phpBlankFile('helpers.php');
444 2
        $generator->file('routes.php')->template('routes.php', $properties);
445
446 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
447 2
            'namespace' => new Constant('__NAMESPACE__'),
448
            'directories' => [
449 2
                'classes',
450 2
            ],
451
            'files' => [
452 2
                'helpers.php',
453 2
            ],
454
            'paths' => [
455 2
                'config' => 'config',
456 2
                'lang' => 'lang',
457 2
                'specs' => 'specs',
458 2
                'views' => 'views',
459 2
                'tests' => 'tests',
460 2
            ],
461
            'providers' => [
462 2
                new ClassName('Providers\AddonServiceProvider'),
463 2
                new ClassName('Providers\RouteServiceProvider'),
464 2
            ],
465
            'http' => [
466
                'middlewares' => [
467 2
                ],
468
                'route_middlewares' => [
469 2
                ],
470 2
            ],
471
            'routes' => [
472 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
473 2
                'prefix' => new Constant("env('APP_ADDON_PATH', 'debug')"),
474 2
                'namespace' => new Constant("__NAMESPACE__.'\\Controllers'"),
475 2
                'middleware' => ['web'],
476
                'files' => [
477
                    'routes.php'
478 2
                ],
479 2
            ],
480 2
        ], $this->DEFAULTS);
481 2
    }
482
483 2
    protected function generateGenerator(FileGenerator $generator, array $properties)
484
    {
485
        $generator->directory('classes', function ($generator) use ($properties) {
486 2
            $generator->directory('Providers')
487 2
                ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties);
488 2
        });
489
490
        $generator->directory('config', function ($generator) use ($properties) {
491 2
            $generator->file('commands.php')->template('commands.php', $properties);
492 2
        });
493
494 2
        $generator->templateDirectory('stubs');
495
496 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
497 2
            'namespace' => new Constant('__NAMESPACE__'),
498
            'directories' => [
499 2
                'classes',
500 2
            ],
501
            'paths' => [
502 2
                'config' => 'config',
503 2
            ],
504
            'providers' => [
505 2
                new ClassName('Providers\AddonServiceProvider'),
506 2
            ],
507 2
        ]);
508 2
    }
509
510 2
    protected function generateLaravel5(FileGenerator $generator, array $properties)
511
    {
512
        $generator->directory('classes', function ($generator) use ($properties) {
513 2
            $generator->directory('Providers')
514 2
                ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties);
515 2
            $generator->directory('Providers')
516 2
                ->file('RouteServiceProvider.php')->template('RouteServiceProvider.php', $properties);
517
518 2
            $generator->keepDirectory('Console/Commands');
519
520 2
            $generator->directory('Http/Controllers')
521 2
                ->file('Controller.php')->template('Controller.php', $properties);
522 2
            $generator->keepDirectory('Http/Middleware');
523
524 2
            $generator->keepDirectory('Services');
525 2
        });
526
527 2
        $generator->keepDirectory('config');
528
529
        $generator->directory('database', function ($generator) use ($properties) {
530 2
            $generator->keepDirectory('factories');
531 2
            $generator->keepDirectory('migrations');
532 2
            $generator->keepDirectory('seeds');
533 2
        });
534
535
        $generator->directory('resources', function ($generator) use ($properties) {
536 2
            $generator->keepDirectory('assets');
537
538
            $this->generateLang($generator, $properties, function ($generator) use ($properties) {
539 2
                $generator->phpConfigFile('messages.php', []);
540 2
            });
541
542 2
            $generator->keepDirectory('views');
543 2
        });
544
545
        $generator->directory('routes', function ($generator) use ($properties) {
546 2
            $generator->file('web.php')->template('routes.php', $properties);
547 2
        });
548
549
        $generator->directory('tests', function ($generator) use ($properties) {
550 2
            $generator->file('TestCase.php')->template('TestCase.php', $properties);
551 2
        });
552
553 2
        $generator->phpBlankFile('helpers.php');
554
555 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
556 2
            'namespace' => new Constant('__NAMESPACE__'),
557
            'directories' => [
558 2
                'classes',
559 2
            ],
560
            'files' => [
561 2
                'helpers.php',
562 2
            ],
563
            'paths' => [
564 2
                'config' => 'config',
565 2
                'assets' => 'resources/assets',
566 2
                'lang' => 'resources/lang',
567 2
                'views' => 'resources/views',
568 2
            ],
569
            'providers' => [
570 2
                new ClassName('Providers\AddonServiceProvider'),
571 2
                new ClassName('Providers\RouteServiceProvider'),
572 2
            ],
573
            'http' => [
574
                'middlewares' => [
575 2
                ],
576
                'route_middlewares' => [
577 2
                ],
578 2
            ],
579
            'routes' => [
580 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
581 2
                'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"),
582 2
                'namespace' => new Constant("__NAMESPACE__.'\\Http\\Controllers'"),
583 2
                'middleware' => ['web'],
584
                'files' => [
585
                    'routes/web.php'
586 2
                ],
587 2
            ],
588 2
        ], $this->DEFAULTS);
589 2
    }
590
591 2
    protected function generateLaravel5Auth(FileGenerator $generator, array $properties)
592
    {
593
        $generator->directory('classes', function ($generator) use ($properties) {
594 2
            $generator->templateDirectory('Migrations', $properties);
595
596 2
            $generator->templateDirectory('Controllers', $properties);
597
598 2
            $generator->templateDirectory('Middleware', $properties);
599
600 2
            $generator->templateDirectory('Providers', $properties);
601
602 2
            $generator->keepDirectory('Services');
603
604 2
            $generator->keepDirectory('Seeds');
605
606 2
            $generator->templateFile('User.php', $properties);
607 2
        });
608
609 2
        $generator->keepDirectory('config');
610
611 2
        $generator->sourceDirectory('lang');
612
        $this->generateLang($generator, $properties, function ($generator) use ($properties) {
613 2
            $generator->phpConfigFile('messages.php', []);
614 2
            $generator->phpConfigFile('vocabulary.php', []);
615 2
            $generator->phpConfigFile('forms.php', []);
616 2
        });
617
618 2
        $generator->templateDirectory('views', $properties);
619
620 2
        $generator->templateDirectory('routes', $properties);
621
622 2
        $generator->templateDirectory('tests', $properties);
623
624 2
        $generator->phpBlankFile('helpers.php');
625
626 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
627 2
            'namespace' => new Constant('__NAMESPACE__'),
628
            'directories' => [
629 2
                'classes',
630 2
            ],
631
            'files' => [
632 2
                'helpers.php',
633 2
            ],
634
            'paths' => [
635 2
                'config' => 'config',
636 2
                'assets' => 'assets',
637 2
                'lang' => 'lang',
638 2
                'views' => 'views',
639 2
                'tests' => 'tests',
640 2
            ],
641
            'providers' => [
642 2
                new ClassName('Providers\AddonServiceProvider'),
643 2
                new ClassName('Providers\DatabaseServiceProvider'),
644 2
                new ClassName('Providers\RouteServiceProvider'),
645 2
            ],
646
            'http' => [
647
                'middlewares' => [
648 2
                ],
649
                'route_middlewares' => [
650 2
                    'auth' => new ClassName('Middleware\Authenticate'),
651 2
                    'auth.basic' => new ClassName('Illuminate\Auth\Middleware\AuthenticateWithBasicAuth'),
652 2
                    'guest' => new ClassName('Middleware\RedirectIfAuthenticated'),
653 2
                ],
654 2
            ],
655
            'routes' => [
656 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
657 2
                'prefix' => new Constant("env('APP_ADDON_PATH', '/')"),
658 2
                'namespace' => new Constant("__NAMESPACE__.'\\Controllers'"),
659 2
                'middleware' => ['web'],
660
                'files' => [
661
                    'routes/web.php'
662 2
                ],
663 2
                'landing' => '/',
664 2
                'home' => '/home',
665 2
                'login' => '/login',
666 2
            ],
667 2
        ], $this->DEFAULTS);
668 2
    }
669
670
    protected function generateLang(FileGenerator $generator, array $properties, callable $callable)
671
    {
672 11
        $generator->directory('lang', function ($generator) use ($properties, $callable) {
673 11
            foreach ($properties['languages'] as $lang) {
674 11
                $generator->directory($lang, $callable);
675 11
            }
676 11
        });
677 11
    }
678
679 21
    protected function generateAddonConfig(FileGenerator $generator, $namespace, array $data, array $defaults = null)
680
    {
681 21
        if ($defaults !== null) {
682 11
            $data = array_replace($defaults, $data);
683 11
        }
684
685 21
        $data = array_merge(['version' => ADDON_VERSION], $data);
686
687 21
        $generator->phpConfigFile('addon.php', $data, $namespace);
688 21
    }
689
}
690