Completed
Push — master ( 8300db...59e3f8 )
by Fumio
02:23
created

Generator   B

Complexity

Total Complexity 18

Size/Duplication

Total Lines 679
Duplicated Lines 7.07 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 99.53%

Importance

Changes 14
Bugs 2 Features 1
Metric Value
c 14
b 2
f 1
dl 48
loc 679
ccs 427
cts 429
cp 0.9953
rs 7.2335
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 __construct() 0 36 1
A generateApi() 14 68 1
B generateGenerator() 0 26 1
B generateLaravel5() 14 80 1
B generateLaravel5Auth() 0 78 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 41
            'namespace' => '',
16
            'directories' => [
17
                // path
18 41
            ],
19
            'files' => [
20
                // path
21 41
            ],
22
            'paths' => [
23
                // role => path
24 41
            ],
25
            'providers' => [
26
                // class
27 41
            ],
28
            'console' => [
29
                'commands' => [
30
                    // class
31 41
                ],
32 41
            ],
33
            'http' => [
34
                'middlewares' => [
35
                    // class
36 41
                ],
37
                'route_middlewares' => [
38
                    // name => class
39 41
                ],
40 41
            ],
41
            'routes' => [
42 41
            ],
43 41
            'includes_global_aliases' => true,
44
            'aliases' => [
45
                // name => class
46 41
            ],
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 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('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 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 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 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 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...
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