ShortClassNames::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 1
1
<?php
2
3
namespace Sdbruder\TinkerTools;
4
5
class ShortClassNames
6
{
7
    /** @var \Illuminate\Support\Collection */
8
    public $classes;
9
10
    public static function register(string $classMapPath = null)
11
    {
12
        $classMapPath = $classMapPath ?? base_path('vendor/composer/autoload_classmap.php');
13
14
        (new static($classMapPath))->registerAutoloader();
15
    }
16
17
    public function __construct(string $classMapPath)
18
    {
19
        $classFiles = include $classMapPath;
20
21
        $this->classes = collect($classFiles)
22
            ->map(function (string $path, string $fqcn) {
23
                $name = last(explode('\\', $fqcn));
24
                return compact('fqcn', 'name');
25
            })
26
            ->filter()
27
            ->values();
28
    }
29
30
    public function registerAutoloader()
31
    {
32
        spl_autoload_register([$this, 'aliasClass']);
33
    }
34
35
    public function aliasClass($findClass)
36
    {
37
        $key = $this->classes->search(function ($class) use ($findClass) {
38
            return $class['name'] === $findClass;
39
        });
40
41
        if (! $key) {
42
            return;
43
        }
44
        
45
        $class = $this->classes[$key];
46
47
        class_alias($class['fqcn'], $class['name']);
48
    }
49
50
}
51