Completed
Push — master ( 141291...217be0 )
by Fumio
02:36
created

Generator   C

Complexity

Total Complexity 18

Size/Duplication

Total Lines 693
Duplicated Lines 6.93 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 99.66%

Importance

Changes 11
Bugs 0 Features 1
Metric Value
c 11
b 0
f 1
dl 48
loc 693
ccs 293
cts 294
cp 0.9966
rs 6.928
wmc 18
lcom 1
cbo 3

15 Methods

Rating   Name   Duplication   Size   Complexity  
A generateAddon() 0 8 1
A generateMinimum() 0 6 1
A generateSimple() 0 57 1
A generateAsset() 0 13 1
A generateLibrary() 0 50 1
A generateUi() 10 69 1
A generateUiSample() 10 73 2
A generateDebug() 0 75 1
B generateGenerator() 0 45 1
B __construct() 0 36 1
A generateApi() 14 68 1
B generateLaravel5() 14 79 1
A generateLaravel5Auth() 0 74 1
A generateLang() 0 8 2
A generateAddonConfig() 0 10 2

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

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 41
    public function __construct() {
14 41
        $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
            'namespace' => '',
16
            'directories' => [
17
                // path
18
            ],
19
            'files' => [
20
                // path
21
            ],
22
            'paths' => [
23
                // role => path
24
            ],
25
            'providers' => [
26
                // class
27
            ],
28
            'console' => [
29
                'commands' => [
30
                    // class
31
                ],
32
            ],
33
            'http' => [
34
                'middlewares' => [
35
                    // class
36
                ],
37
                'route_middlewares' => [
38
                    // name => class
39
                ],
40
            ],
41
            'routes' => [
42
            ],
43
            'includes_global_aliases' => true,
44
            'aliases' => [
45
                // name => class
46
            ],
47
        ];
48 41
    }
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
        ]);
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
                'classes',
99
            ],
100
            'files' => [
101
                'helpers.php',
102
            ],
103
            'paths' => [
104
                'config' => 'config',
105
                'lang' => 'lang',
106
                'views' => 'views',
107
            ],
108
            'providers' => [
109 2
                new ClassName('Providers\AddonServiceProvider'),
110 2
                new ClassName('Providers\RouteServiceProvider'),
111
            ],
112
            'http' => [
113
                'middlewares' => [
114
                ],
115
                'route_middlewares' => [
116
                ],
117
            ],
118
            'routes' => [
119 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
120 2
                'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"),
121
                'middleware' => [],
122
                'files' => [
123
                    'routes.php'
124
                ],
125
            ],
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
                'assets' => 'assets',
139 1
            ],
140
        ]);
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('Database/Migrations')
156 2
                ->file($migration_class.'.php')->template('Migration.php', array_merge($properties, ['class_name' => $migration_class]));
157 2
            $generator->keepDirectory('Database/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
                'classes',
178
            ],
179
            'files' => [
180
                'helpers.php',
181
            ],
182
            'paths' => [
183
                'config' => 'config',
184
                'lang' => 'lang',
185
                'tests' => 'tests',
186
            ],
187
            'providers' => [
188 2
                new ClassName('Providers\AddonServiceProvider'),
189 2
                new ClassName('Providers\DatabaseServiceProvider'),
190
            ],
191 2
        ], $this->DEFAULTS);
192 2
    }
193
194 2
    protected function generateApi(FileGenerator $generator, array $properties)
195
    {
196 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...
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('Http/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
                'classes',
232
            ],
233
            'files' => [
234
                'helpers.php',
235
            ],
236
            'paths' => [
237
                'config' => 'config',
238
                'lang' => 'lang',
239
                'specs' => 'specs',
240
                'tests' => 'tests',
241
            ],
242
            'providers' => [
243 2
                new ClassName('Providers\AddonServiceProvider'),
244 2
                new ClassName('Providers\RouteServiceProvider'),
245
            ],
246
            'http' => [
247
                'middlewares' => [
248
                ],
249
                'route_middlewares' => [
250
                ],
251
            ],
252
            'routes' => [
253 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
254 2
                'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"),
255
                'middleware' => ['api'],
256
                'files' => [
257
                    'routes.php'
258
                ],
259
            ],
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
                'classes',
299
            ],
300
            'files' => [
301
                'helpers.php',
302
            ],
303
            'paths' => [
304
                'config' => 'config',
305
                'assets' => 'assets',
306
                'lang' => 'lang',
307
                'specs' => 'specs',
308
                'views' => 'views',
309
                'tests' => 'tests',
310
            ],
311
            'providers' => [
312 4
                new ClassName('Providers\AddonServiceProvider'),
313 4
                new ClassName('Providers\RouteServiceProvider'),
314
            ],
315
            'http' => [
316
                'middlewares' => [
317
                ],
318
                'route_middlewares' => [
319
                ],
320
            ],
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
                'middleware' => ['web'],
326
                'files' => [
327
                    'routes.php'
328
                ],
329
            ],
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
                'classes',
373
            ],
374
            'files' => [
375
                'helpers.php',
376
            ],
377
            'paths' => [
378
                'config' => 'config',
379
                'assets' => 'assets',
380
                'lang' => 'lang',
381
                'specs' => 'specs',
382
                'views' => 'views',
383
                'tests' => 'tests',
384
            ],
385
            'providers' => [
386 2
                new ClassName('Providers\AddonServiceProvider'),
387 2
                new ClassName('Providers\RouteServiceProvider'),
388
            ],
389
            'http' => [
390
                'middlewares' => [
391
                ],
392
                'route_middlewares' => [
393
                ],
394
            ],
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
                'middleware' => ['web'],
400
                'files' => [
401
                    'routes.php'
402
                ],
403
            ],
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
                'classes',
450
            ],
451
            'files' => [
452
                'helpers.php',
453
            ],
454
            'paths' => [
455
                'config' => 'config',
456
                'lang' => 'lang',
457
                'specs' => 'specs',
458
                'views' => 'views',
459
                'tests' => 'tests',
460
            ],
461
            'providers' => [
462 2
                new ClassName('Providers\AddonServiceProvider'),
463 2
                new ClassName('Providers\RouteServiceProvider'),
464
            ],
465
            'http' => [
466
                'middlewares' => [
467
                ],
468
                'route_middlewares' => [
469
                ],
470
            ],
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
                'middleware' => ['web'],
476
                'files' => [
477
                    'routes.php'
478
                ],
479
            ],
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
        $generator->directory('stubs', function ($generator) use ($properties) {
495 2
            $generator->sourceFile('_console.stub');
496 2
            $generator->sourceFile('_controller.stub');
497 2
            $generator->sourceFile('_controller-resource.stub');
498 2
            $generator->sourceFile('_event.stub');
499 2
            $generator->sourceFile('_job.stub');
500 2
            $generator->sourceFile('_job-queued.stub');
501 2
            $generator->sourceFile('_listener.stub');
502 2
            $generator->sourceFile('_listener-queued.stub');
503 2
            $generator->sourceFile('_middleware.stub');
504 2
            $generator->sourceFile('_migration.stub');
505 2
            $generator->sourceFile('_migration-create.stub');
506 2
            $generator->sourceFile('_migration-update.stub');
507 2
            $generator->sourceFile('_model.stub');
508 2
            $generator->sourceFile('_policy.stub');
509 2
            $generator->sourceFile('_provider.stub');
510 2
            $generator->sourceFile('_request.stub');
511 2
            $generator->sourceFile('_seeder.stub');
512 2
            $generator->sourceFile('_test.stub');
513 2
        });
514
515 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
516 2
            'namespace' => new Constant('__NAMESPACE__'),
517
            'directories' => [
518
                'classes',
519
            ],
520
            'paths' => [
521
                'config' => 'config',
522
            ],
523
            'providers' => [
524 2
                new ClassName('Providers\AddonServiceProvider'),
525
            ],
526
        ]);
527 2
    }
528
529 2
    protected function generateLaravel5(FileGenerator $generator, array $properties)
530
    {
531 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...
532 2
            $generator->directory('Providers')
533 2
                ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties);
534 2
            $generator->directory('Providers')
535 2
                ->file('RouteServiceProvider.php')->template('RouteServiceProvider.php', $properties);
536
537 2
            $generator->keepDirectory('Console/Commands');
538
539 2
            $generator->directory('Http/Controllers')
540 2
                ->file('Controller.php')->template('Controller.php', $properties);
541 2
            $generator->keepDirectory('Http/Middleware');
542
543 2
            $generator->keepDirectory('Services');
544 2
        });
545
546 2
        $generator->keepDirectory('config');
547
548
        $generator->directory('database', function ($generator) use ($properties) {
549 2
            $generator->keepDirectory('factories');
550 2
            $generator->keepDirectory('migrations');
551 2
            $generator->keepDirectory('seeds');
552 2
        });
553
554
        $generator->directory('resources', function ($generator) use ($properties) {
555 2
            $generator->keepDirectory('assets');
556
557
            $this->generateLang($generator, $properties, function ($generator) use ($properties) {
558 2
                $generator->phpConfigFile('messages.php', []);
559 2
            });
560
561 2
            $generator->keepDirectory('views');
562 2
        });
563
564 2
        $generator->directory('routes')
565 2
            ->file('web.php')->template('routes.php', $properties);
566
567
        $generator->directory('tests', function ($generator) use ($properties) {
568 2
            $generator->file('TestCase.php')->template('TestCase.php', $properties);
569 2
        });
570
571 2
        $generator->phpBlankFile('helpers.php');
572
573 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
574 2
            'namespace' => new Constant('__NAMESPACE__'),
575
            'directories' => [
576
                'classes',
577
            ],
578
            'files' => [
579
                'helpers.php',
580
            ],
581
            'paths' => [
582
                'config' => 'config',
583
                'assets' => 'resources/assets',
584
                'lang' => 'resources/lang',
585
                'views' => 'resources/views',
586
            ],
587
            'providers' => [
588 2
                new ClassName('Providers\AddonServiceProvider'),
589 2
                new ClassName('Providers\RouteServiceProvider'),
590
            ],
591
            'http' => [
592
                'middlewares' => [
593
                ],
594
                'route_middlewares' => [
595
                ],
596
            ],
597
            'routes' => [
598 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
599 2
                'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"),
600 2
                'namespace' => new Constant("__NAMESPACE__.'\\Http\\Controllers'"),
601
                'middleware' => ['web'],
602
                'files' => [
603
                    'routes/web.php'
604
                ],
605
            ],
606 2
        ], $this->DEFAULTS);
607 2
    }
608
609 2
    protected function generateLaravel5Auth(FileGenerator $generator, array $properties)
610
    {
611
        $generator->directory('classes', function ($generator) use ($properties) {
612 2
            $generator->templateDirectory('Migrations', $properties);
613 2
            $generator->keepDirectory('Seeds');
614
615 2
            $generator->templateDirectory('Controllers', $properties);
616
617 2
            $generator->templateDirectory('Providers', $properties);
618
619 2
            $generator->keepDirectory('Services');
620
621 2
            $generator->templateFile('User.php', $properties);
622 2
        });
623
624 2
        $generator->keepDirectory('config');
625
626 2
        $generator->sourceDirectory('lang');
627
        $this->generateLang($generator, $properties, function ($generator) use ($properties) {
628 2
            $generator->phpConfigFile('messages.php', []);
629 2
            $generator->phpConfigFile('vocabulary.php', []);
630 2
            $generator->phpConfigFile('forms.php', []);
631 2
        });
632
633 2
        $generator->templateDirectory('views', $properties);
634
635 2
        $generator->templateDirectory('tests', $properties);
636
637 2
        $generator->phpBlankFile('helpers.php');
638
639 2
        $this->generateAddonConfig($generator, $properties['namespace'], [
640 2
            'namespace' => new Constant('__NAMESPACE__'),
641
            'directories' => [
642
                'classes',
643
            ],
644
            'files' => [
645
                'helpers.php',
646
            ],
647
            'paths' => [
648
                'config' => 'config',
649
                'assets' => 'assets',
650
                'lang' => 'lang',
651
                'specs' => 'specs',
652
                'views' => 'views',
653
                'tests' => 'tests',
654
            ],
655
            'providers' => [
656 2
                new ClassName('Providers\AddonServiceProvider'),
657 2
                new ClassName('Providers\DatabaseServiceProvider'),
658 2
                new ClassName('Providers\RouteServiceProvider'),
659
            ],
660
            'http' => [
661
                'middlewares' => [
662
                ],
663
                'route_middlewares' => [
664 2
                    'auth' => new ClassName('Middleware\Authenticate'),
665 2
                    'auth.basic' => new ClassName('Illuminate\Auth\Middleware\AuthenticateWithBasicAuth'),
666 2
                    'guest' => new ClassName('Middleware\RedirectIfAuthenticated'),
667
                ],
668
            ],
669
            'routes' => [
670 2
                'domain' => new Constant("env('APP_ADDON_DOMAIN')"),
671 2
                'prefix' => new Constant("env('APP_ADDON_PATH', '/')"),
672 2
                'namespace' => new Constant("__NAMESPACE__.'\\Controllers'"),
673
                'middleware' => ['web'],
674
                'files' => [
675
                    'routes/web.php'
676
                ],
677 2
                'landing' => '/',
678 2
                'home' => '/home',
679 2
                'login' => '/login',
680
            ],
681 2
        ], $this->DEFAULTS);
682 2
    }
683
684
    protected function generateLang(FileGenerator $generator, array $properties, callable $callable)
685
    {
686 11
        $generator->directory('lang', function ($generator) use ($properties, $callable) {
687 11
            foreach ($properties['languages'] as $lang) {
688 11
                $generator->directory($lang, $callable);
689
            }
690 11
        });
691 11
    }
692
693 21
    protected function generateAddonConfig(FileGenerator $generator, $namespace, array $data, array $defaults = null)
694
    {
695 21
        if ($defaults !== null) {
696 11
            $data = array_replace($defaults, $data);
697
        }
698
699 21
        $data = array_merge(['version' => ADDON_VERSION], $data);
700
701 21
        $generator->phpConfigFile('addon.php', $data, $namespace);
702 21
    }
703
}
704