ResponseMessages::successActionVerb()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
cc 2
eloc 3
c 2
b 1
f 0
nc 2
nop 1
dl 0
loc 7
rs 10
1
<?php
2
3
namespace Sfneal\CrudModelActions\Utils;
4
5
use Sfneal\Models\Actions\ResolveModelName;
6
7
trait ResponseMessages
8
{
9
    /**
10
     * @var string Verb used to describe the action performed on the model (created, updated, etc.
11
     */
12
    private $successActionVerb;
13
14
    /**
15
     * @var string Message to session flash & log after a successful action
16
     */
17
    private $successMessage;
18
19
    /**
20
     * @var string Object which was manipulated (Client, Project, Task, etc...)
21
     */
22
    private $successNoun;
23
24
    /**
25
     * @var string Message to session flash & log after a failed action
26
     */
27
    private $failMessage;
28
29
    /**
30
     * Response message sent on success.
31
     *
32
     * @param  string|null  $message
33
     * @return string
34
     */
35
    protected function successMessage(string $message = null): string
36
    {
37
        // Set the message during runtime
38
        if (isset($message)) {
39
            $this->successMessage = $message;
40
        }
41
42
        // Return declared success message
43
        if (isset($this->successMessage)) {
44
            return $this->successMessage;
45
        }
46
47
        // Return the default success message
48
        else {
49
            return "{$this->successNoun()} has been {$this->successActionVerb()} successfully.";
50
        }
51
    }
52
53
    /**
54
     * Retrieve the 'noun' to be used as the object of the success message.
55
     *
56
     * @param  string|null  $noun
57
     * @return string
58
     */
59
    protected function successNoun(string $noun = null): string
60
    {
61
        // todo: add spaces to CamelCase $nouns
62
        // todo: add ID
63
        // Set the success noun if passed
64
        if (isset($noun)) {
65
            $this->successNoun = $noun;
66
        }
67
68
        // Return the declared success noun or use default
69
        return $this->successNoun ?? $this->getModelShortName();
70
    }
71
72
    /**
73
     * Action verb to be used in to the success message.
74
     *
75
     * @param  string|null  $verb
76
     * @return string
77
     */
78
    protected function successActionVerb(string $verb = null): string
79
    {
80
        if (isset($verb)) {
81
            $this->successActionVerb = $verb;
82
        }
83
84
        return strtolower($this->successActionVerb ?? $this->model->mostRecentChange());
85
    }
86
87
    /**
88
     * Response message sent on failure.
89
     *
90
     * @param  string|null  $message
91
     * @return string
92
     */
93
    protected function failMessage(string $message = null): string
94
    {
95
        // Set the message during runtime
96
        if (isset($message)) {
97
            $this->failMessage = $message;
98
        }
99
100
        // Return declared fail message
101
        if (isset($this->failMessage)) {
102
            return $this->failMessage;
103
        }
104
105
        // Return the default fail message
106
        else {
107
            return "Error! Unable to save or update the {$this->getModelShortName()}.";
108
        }
109
    }
110
111
    /**
112
     * Retrieve the Model class's short name (without namespace).
113
     *
114
     * @return string
115
     */
116
    private function getModelShortName(): string
117
    {
118
        return (new ResolveModelName($this->model ?? $this->modelClass, true))->execute();
119
    }
120
}
121