Passed
Push — master ( 935f04...13f58e )
by Caen
03:43 queued 12s
created

ManagesHydeKernel::boot()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A ManagesHydeKernel::setInstance() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Hyde\Foundation\Concerns;
6
7
use BadMethodCallException;
8
use Hyde\Foundation\HydeKernel;
9
use Hyde\Pages\Concerns\HydePage;
10
use Hyde\Pages\Contracts\DynamicPage;
11
use function in_array;
12
use InvalidArgumentException;
13
use function is_subclass_of;
14
15
/**
16
 * @internal Single-use trait for the HydeKernel class.
17
 *
18
 * @see \Hyde\Foundation\HydeKernel
19
 */
20
trait ManagesHydeKernel
21
{
22
    public static function getInstance(): HydeKernel
23
    {
24
        return static::$instance;
25
    }
26
27
    public static function setInstance(HydeKernel $instance): void
28
    {
29
        static::$instance = $instance;
0 ignored issues
show
Bug Best Practice introduced by
The property instance does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
30
    }
31
32
    public function setBasePath(string $basePath): void
33
    {
34
        $this->basePath = rtrim($basePath, '/\\');
0 ignored issues
show
Bug Best Practice introduced by
The property basePath does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
35
    }
36
37
    public function getBasePath(): string
38
    {
39
        return $this->basePath;
40
    }
41
42
    public function setSourceRoot(string $sourceRoot): void
43
    {
44
        $this->sourceRoot = rtrim($sourceRoot, '/\\');
0 ignored issues
show
Bug Best Practice introduced by
The property sourceRoot does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
45
    }
46
47
    public function getSourceRoot(): string
48
    {
49
        return $this->sourceRoot;
50
    }
51
52
    /**
53
     * Developer Information.
54
     *
55
     * @experimental This feature is experimental and may change substantially before the 1.0.0 release.
56
     *
57
     * If you are a package developer, and want a custom page class to be discovered,
58
     * you'll need to register it sometime before the boot process, before discovery is run.
59
     * Typically, you would do this by calling this method in the register method of a service provider.
60
     * Hyde will then automatically discover source files for the new page class, and compile them during the build process.
61
     *
62
     * @param  class-string<\Hyde\Pages\Concerns\HydePage>  $pageClass
0 ignored issues
show
Documentation Bug introduced by
The doc comment class-string<\Hyde\Pages\Concerns\HydePage> at position 0 could not be parsed: Unknown type name 'class-string' at position 0 in class-string<\Hyde\Pages\Concerns\HydePage>.
Loading history...
63
     */
64
    public function registerPageClass(string $pageClass): void
65
    {
66
        if ($this->booted) {
67
            // We throw an exception here to prevent the developer from registering a page class after the Kernel has been booted.
68
            // The reason we do this is because at this point all the source files have already been discovered and parsed.
69
            // If we allowed new classes after this point, we would have to reboot everything which adds complexity.
70
71
            throw new BadMethodCallException('Cannot register a page class after the Kernel has been booted.');
72
        }
73
74
        if (! is_subclass_of($pageClass, HydePage::class)) {
75
            throw new InvalidArgumentException('The specified class must be a subclass of HydePage.');
76
        }
77
78
        if (is_subclass_of($pageClass, DynamicPage::class)) {
79
            throw new InvalidArgumentException('The specified class must not be a subclass of DynamicPage.');
80
        }
81
82
        if (! in_array($pageClass, $this->pageClasses, true)) {
83
            $this->pageClasses[] = $pageClass;
0 ignored issues
show
Bug Best Practice introduced by
The property pageClasses does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
84
        }
85
    }
86
87
    /** @return array<class-string<\Hyde\Pages\Concerns\HydePage>> */
0 ignored issues
show
Documentation Bug introduced by
The doc comment array<class-string<\Hyde...ges\Concerns\HydePage>> at position 2 could not be parsed: Unknown type name 'class-string' at position 2 in array<class-string<\Hyde\Pages\Concerns\HydePage>>.
Loading history...
88
    public function getRegisteredPageClasses(): array
89
    {
90
        return $this->pageClasses;
91
    }
92
}
93