Completed
Pull Request — master (#108)
by Brent
01:10
created

FieldDoesNotExtendState   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 2
dl 0
loc 49
rs 10
c 0
b 0
f 0
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
9
class FieldDoesNotExtendState extends InvalidConfig implements ProvidesSolution
10
{
11
    protected string $field;
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected T_STRING, expecting T_FUNCTION or T_CONST
Loading history...
12
13
    protected string $expectedStateClass;
14
15
    protected string $actualClass;
16
17
    public static function make(string $field, string $expectedStateClass, string $actualClass): self
18
    {
19
        return (new static("State field `{$field}` expects state to be of type `{$expectedStateClass}`, instead got `{$actualClass}`"))
20
            ->setField($field)
21
            ->setExpectedStateClass($expectedStateClass)
22
            ->setActualClass($actualClass);
23
    }
24
25
    public function setField(string $field): self
26
    {
27
        $this->field = $field;
28
29
        return $this;
30
    }
31
32
    public function setExpectedStateClass(string $expectedStateClass): self
33
    {
34
        $this->expectedStateClass = $expectedStateClass;
35
36
        return $this;
37
    }
38
39
    public function setActualClass(string $actualClass): self
40
    {
41
        $this->actualClass = $actualClass;
42
43
        return $this;
44
    }
45
46
    public function getSolution(): Solution
47
    {
48
        return BaseSolution::create("State field `{$this->field}` is the wrong type")
49
            ->setSolutionDescription("Make sure that states for state field `{$this->field}` extend `{$this->expectedStateClass}`, not `{$this->actualClass}`")
50
            ->setDocumentationLinks([
51
                'Configuring states' => 'https://docs.spatie.be/laravel-model-states/v1/working-with-states/01-configuring-states/',
52
            ]);
53
    }
54
}
55