JsonDeserializer   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 4
dl 0
loc 53
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A deserializeQueryBuilderRule() 0 14 1
A deserializeQueryBuilderRuleSet() 0 19 3
1
<?php
2
3
/*
4
 * This file is part of the jquery-querybuilder-bundle package.
5
 *
6
 * (c) 2021 WEBEWEB
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace WBW\Bundle\JQuery\QueryBuilderBundle\Serializer;
13
14
use InvalidArgumentException;
15
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderFilterSetInterface;
16
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderRuleInterface;
17
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderRuleSetInterface;
18
use WBW\Bundle\JQuery\QueryBuilderBundle\Model\QueryBuilderRule;
19
use WBW\Bundle\JQuery\QueryBuilderBundle\Model\QueryBuilderRuleSet;
20
use WBW\Library\Core\Argument\Helper\ArrayHelper;
21
22
/**
23
 * JSON deserializer.
24
 *
25
 * @author webeweb <https://github.com/webeweb/>
26
 * @package WBW\Bundle\JQuery\QueryBuilderBundle\Serializer
27
 */
28
class JsonDeserializer {
29
30
    /**
31
     * Deserialize a rule.
32
     *
33
     * @param QueryBuilderFilterSetInterface $filterSet The filter set.
34
     * @param array $rule The rule.
35
     * @return QueryBuilderRuleInterface Returns the de-normalized rule.
36
     * @throws InvalidArgumentException Throws an invalid argument exception if an argument is invalid.
37
     */
38
    public static function deserializeQueryBuilderRule(QueryBuilderFilterSetInterface $filterSet, array $rule): QueryBuilderRuleInterface {
39
40
        $model = new QueryBuilderRule();
41
        $model->setId(ArrayHelper::get($rule, "id"));
42
        $model->setField(ArrayHelper::get($rule, "field"));
43
        $model->setInput(ArrayHelper::get($rule, "input"));
44
        $model->setOperator(ArrayHelper::get($rule, "operator"));
45
        $model->setType(ArrayHelper::get($rule, "type"));
46
        $model->setValue(ArrayHelper::get($rule, "value"));
47
48
        $model->setDecorator($filterSet->getDecorator($model->getId()));
49
50
        return $model;
51
    }
52
53
    /**
54
     * Deserialize a rule set.
55
     *
56
     * @param QueryBuilderFilterSetInterface $filterSet The filter set.
57
     * @param array $rules The rules.
58
     * @return QueryBuilderRuleSetInterface Returns the rule set.
59
     * @throws InvalidArgumentException Throws an invalid argument exception if an argument is invalid.
60
     */
61
    public static function deserializeQueryBuilderRuleSet(QueryBuilderFilterSetInterface $filterSet, array $rules): QueryBuilderRuleSetInterface {
62
63
        $model = new QueryBuilderRuleSet();
64
        $model->setCondition(ArrayHelper::get($rules, "condition", null));
65
        $model->setValid(ArrayHelper::get($rules, "valid", false));
66
67
        foreach (ArrayHelper::get($rules, "rules", []) as $current) {
68
69
            // Rule set ?
70
            if (true === array_key_exists("condition", $current)) {
71
                $model->addRuleSet(JsonDeserializer::deserializeQueryBuilderRuleSet($filterSet, $current));
72
                continue;
73
            }
74
75
            $model->addRule(JsonDeserializer::deserializeQueryBuilderRule($filterSet, $current));
76
        }
77
78
        return $model;
79
    }
80
}