Model   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 3
dl 0
loc 52
ccs 0
cts 15
cp 0
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
findRecordByModel() 0 1 ?
A transferToRecord() 0 11 2
A toRecord() 0 13 2
1
<?php
2
3
/**
4
 * @copyright  Copyright (c) Flipbox Digital Limited
5
 * @license    https://github.com/flipbox/spark/blob/master/LICENSE
6
 * @link       https://github.com/flipbox/spark
7
 */
8
9
namespace flipbox\spark\services\traits;
10
11
use flipbox\spark\models\Model as BaseModel;
12
use flipbox\spark\records\Record;
13
14
/**
15
 * @author Flipbox Factory <[email protected]>
16
 * @since 2.0.0
17
 */
18
trait Model
19
{
20
21
    use Object;
22
23
    /*******************************************
24
     * Model -to- Record
25
     *******************************************/
26
27
    /**
28
     * @param BaseModel $model
29
     * @return Record
30
     */
31
    abstract public function findRecordByModel(BaseModel $model);
32
33
    /**
34
     * @param BaseModel $model
35
     * @param Record $record
36
     * @param bool $mirrorScenario
37
     * @return void
38
     */
39
    public function transferToRecord(BaseModel $model, Record $record, bool $mirrorScenario = true)
40
    {
41
42
        if ($mirrorScenario === true) {
43
            // Mirror scenarios
44
            $record->setScenario($model->getScenario());
45
        }
46
47
        // Transfer attributes
48
        $record->setAttributes($model->toArray());
49
    }
50
51
    /**
52
     * @param BaseModel $model
53
     * @param bool $mirrorScenario
54
     * @return Record
55
     */
56
    public function toRecord(BaseModel $model, bool $mirrorScenario = true): Record
57
    {
58
59
        if (!$record = $this->findRecordByModel($model)) {
60
            // Create new record
61
            $record = $this->createRecord();
62
        }
63
64
        // Populate the record attributes
65
        $this->transferToRecord($model, $record, $mirrorScenario);
66
67
        return $record;
68
    }
69
}
70