Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 69
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
AliasAutoloader
0.00% covered (danger)
0.00%
0 / 68
0.00% covered (danger)
0.00%
0 / 6
420
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 autoload
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
42
 load
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 classTemplate
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
30
 interfaceTemplate
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
12
 traitTemplate
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3// FunctionsAndConstants
4
5namespace BrianHenryIE\Strauss {
6
7    class AliasAutoloader
8    {
9        private string $includeFilePath;
10
11        private array $autoloadAliases = [];
12
13        public function __construct()
14        {
15            $this->includeFilePath = __DIR__ . '/autoload_alias.php';
16        }
17
18        public function autoload($class)
19        {
20            if (!isset($this->autoloadAliases[$class])) {
21                return;
22            }
23            switch ($this->autoloadAliases[$class]['type']) {
24                case 'class':
25                        $this->load(
26                            $this->classTemplate(
27                                $this->autoloadAliases[$class]
28                            )
29                        );
30                    break;
31                case 'interface':
32                    $this->load(
33                        $this->interfaceTemplate(
34                            $this->autoloadAliases[$class]
35                        )
36                    );
37                    break;
38                case 'trait':
39                    $this->load(
40                        $this->traitTemplate(
41                            $this->autoloadAliases[$class]
42                        )
43                    );
44                    break;
45                default:
46                    // Never.
47                    break;
48            }
49        }
50
51        private function load(string $includeFile)
52        {
53            file_put_contents($this->includeFilePath, $includeFile);
54            include $this->includeFilePath;
55            file_exists($this->includeFilePath) && unlink($this->includeFilePath);
56        }
57
58        private function classTemplate(array $class): string
59        {
60            $abstract = $class['isabstract'] ? 'abstract ' : '';
61            $classname = $class['classname'];
62            if (isset($class['namespace'])) {
63                $namespace = "namespace {$class['namespace']};";
64                $extends = '\\' . $class['extends'];
65                $implements = empty($class['implements']) ? ''
66                : ' implements \\' . implode(', \\', $class['implements']);
67            } else {
68                $namespace = '';
69                $extends = $class['extends'];
70                $implements = !empty($class['implements']) ? ''
71                : ' implements ' . implode(', ', $class['implements']);
72            }
73            return <<<EOD
74                <?php
75                $namespace
76                $abstract class $classname extends $extends $implements {}
77                EOD;
78        }
79
80        private function interfaceTemplate(array $interface): string
81        {
82            $interfacename = $interface['interfacename'];
83            $namespace = isset($interface['namespace'])
84            ? "namespace {$interface['namespace']};" : '';
85            $extends = isset($interface['namespace'])
86            ? '\\' . implode('\\ ,', $interface['extends'])
87            : implode(', ', $interface['extends']);
88            return <<<EOD
89                <?php
90                $namespace
91                interface $interfacename extends $extends {}
92                EOD;
93        }
94        private function traitTemplate(array $trait): string
95        {
96            $traitname = $trait['traitname'];
97            $namespace = isset($trait['namespace'])
98            ? "namespace {$trait['namespace']};" : '';
99            $uses = isset($trait['namespace'])
100            ? '\\' . implode(';' . PHP_EOL . '    use \\', $trait['use'])
101            : implode(';' . PHP_EOL . '    use ', $trait['use']);
102            return <<<EOD
103                <?php
104                $namespace
105                trait $traitname { 
106                    use $uses
107                }
108                EOD;
109        }
110    }
111
112    spl_autoload_register([ new AliasAutoloader(), 'autoload' ]);
113}