ClassDoesNotExtendBaseClass::setClass()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 2
c 1
b 0
f 0
dl 0
loc 5
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Spatie\ModelStates\Exceptions;
4
5
use Facade\IgnitionContracts\BaseSolution;
6
use Facade\IgnitionContracts\ProvidesSolution;
7
use Facade\IgnitionContracts\Solution;
8
use Illuminate\Support\Str;
9
10
class ClassDoesNotExtendBaseClass extends InvalidConfig implements ProvidesSolution
11
{
12
    /** @var string */
13
    protected $class;
14
15
    /** @var string */
16
    protected $baseClass;
17
18
    public static function make(string $class, string $baseClass): self
19
    {
20
        return (new static("Class {$class} does not extend the `{$baseClass}` base class."))
21
            ->setClass($class)
22
            ->setBaseClass($baseClass);
23
    }
24
25
    public function setClass(string $class): self
26
    {
27
        $this->class = $class;
28
29
        return $this;
30
    }
31
32
    public function setBaseClass(string $baseClass): self
33
    {
34
        $this->baseClass = $baseClass;
35
36
        return $this;
37
    }
38
39
    public function getSolution(): Solution
40
    {
41
        $documentationLinks = Str::endsWith($this->baseClass, 'State')
42
            ? ['Configuring states' => 'https://docs.spatie.be/laravel-model-states/v1/working-with-states/01-configuring-states/']
43
            : ['Custom transition classes' => 'https://docs.spatie.be/laravel-model-states/v1/working-with-transitions/02-custom-transition-classes/'];
44
45
        return BaseSolution::create('')
46
            ->setSolutionDescription("Make sure that `{$this->class}` extends `{$this->baseClass}`")
47
            ->setDocumentationLinks($documentationLinks);
48
    }
49
}
50