Passed
Push — master ( e178e9...0a6cdc )
by Rutger
13:08
created

BooleanBehavior::boolToInt()   A

Complexity

Conditions 5
Paths 4

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 5.2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 4
c 1
b 0
f 0
dl 0
loc 8
ccs 4
cts 5
cp 0.8
rs 9.6111
cc 5
nc 4
nop 0
crap 5.2
1
<?php
2
3
namespace rhertogh\Yii2Oauth2Server\models\behaviors;
4
5
use yii\base\Behavior;
6
use yii\db\ActiveRecord;
7
use yii\db\Schema;
8
9
class BooleanBehavior extends Behavior
10
{
11
    /**
12
     * Nummeric database schema types.
13
     */
14
    public const NUMERIC_SCHEMA_TYPES = [
15
        Schema::TYPE_INTEGER,
16
        Schema::TYPE_BIGINT,
17
        Schema::TYPE_SMALLINT,
18
        Schema::TYPE_TINYINT,
19
        Schema::TYPE_FLOAT,
20
    ];
21
22
    /**
23
     * @inheritDoc
24
     */
25 97
    public function events()
26
    {
27
        return [
28 97
            ActiveRecord::EVENT_BEFORE_VALIDATE => 'boolToInt',
29
            ActiveRecord::EVENT_BEFORE_INSERT => 'boolToInt',
30
            ActiveRecord::EVENT_BEFORE_UPDATE => 'boolToInt',
31
        ];
32
    }
33
34
    /**
35
     * Convert boolean values to integers before inserting them into the database.
36
     * @throws \yii\base\InvalidConfigException
37
     * @since 1.0.0
38
     */
39 1
    public function boolToInt()
40
    {
41
        /** @var ActiveRecord $activeRecord */
42 1
        $activeRecord = $this->owner;
43
44 1
        foreach ($activeRecord->getTableSchema()->columns as $column) {
45 1
            if (is_bool($activeRecord->{$column->name}) && in_array($column->type, static::NUMERIC_SCHEMA_TYPES)) {
46
                $activeRecord->{$column->name} = $activeRecord->{$column->name} ? 1 : 0;
47
            }
48
        }
49
    }
50
}
51