ProctRecordAction   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Test Coverage

Coverage 80%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 9
dl 0
loc 45
ccs 8
cts 10
cp 0.8
rs 10
c 1
b 0
f 0
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A errorException() 0 3 1
A successResponse() 0 3 1
A run() 0 9 2
1
<?php
2
3
namespace roaresearch\yii2\roa\actions;
4
5
use roaresearch\yii2\roa\hal\ARContract;
6
use Yii;
7
use yii\web\{HttpException, ServerErrorHttpException};
8
9
/**
10
 * Proct a record. Returns the record on success, throws exception on error.
11
 *
12
 * @author Angel (Faryshta) Guevara <[email protected]>
13
 */
14
abstract class ProctRecordAction extends Action
15
{
16
    /**
17
     * @var string error message thrown when proct fails.
18
     */
19
    protected string $errorMessage = 'Process failed for unknown reasons.';
20
21
    /**
22
     * Procts a record.
23
     *
24
     * @param mixed $id the identifier value.
25
     * @return ARContract the record after successful proct
26
     */
27 8
    public function run($id): ?ARContract
28
    {
29 8
        $this->checkAccess(
30 8
            ($model = $this->findModel($id)),
31 8
            ($params = Yii::$app->request->getQueryParams())
32
        );
33 8
        $this->proct($model, $params) ?: throw $this->errorException();
34
35 8
        return $this->successResponse($model);
36
    }
37
38
    /**
39
     * @param ARContract $model
40
     * @param array $params the request params
41
     * @return bool whether the proct was successful
42
     */
43
    abstract protected function proct(ARContract $model, array $params): bool;
44
45
    /**
46
     * @return HttpException
47
     */
48
    protected function errorException(): HttpException
49
    {
50
        return new ServerErrorHttpException($this->errorMessage);
51
    }
52
53
    /**
54
     * @param ARContract $model
55
     */
56 3
    protected function successResponse(ARContract $model)
57
    {
58 3
        return $model;
59
    }
60
}
61