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

BooleanBehavior   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Test Coverage

Coverage 85.71%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 15
c 1
b 0
f 0
dl 0
loc 38
ccs 6
cts 7
cp 0.8571
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A events() 0 6 1
A boolToInt() 0 8 5
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