QueryBuilderDecoratorFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 1
dl 0
loc 89
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A enumQueryBuilderOperators() 0 24 1
A enumQueryBuilderTypes() 0 11 1
A newQueryBuilderDecorator() 0 9 2
A newQueryBuilderOperator() 0 3 1
A newQueryBuilderType() 0 3 1
1
<?php
2
3
/*
4
 * This file is part of the jquery-querybuilder-bundle package.
5
 *
6
 * (c) 2019 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\Decorator;
13
14
use InvalidArgumentException;
15
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderDecoratorInterface;
16
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderOperatorInterface;
17
use WBW\Bundle\JQuery\QueryBuilderBundle\API\QueryBuilderTypeInterface;
18
use WBW\Library\Core\Argument\Helper\ArrayHelper;
19
20
/**
21
 * QueryBuilder decorator factory.
22
 *
23
 * @author webeweb <https://github.com/webeweb/>
24
 * @package WBW\Bundle\JQuery\QueryBuilderBundle\Decorator
25
 */
26
class QueryBuilderDecoratorFactory implements QueryBuilderOperatorInterface, QueryBuilderTypeInterface {
27
28
    /**
29
     * Enumerate the QueryBuilder operators.
30
     *
31
     * @return array Returns the QueryBuilder operators enumeration.
32
     */
33
    protected static function enumQueryBuilderOperators(): array {
34
        return [
35
            self::OPERATOR_BEGINS_WITH      => __NAMESPACE__ . "\\Operator\\BeginsWithQueryBuilderOperator",
36
            self::OPERATOR_BETWEEN          => __NAMESPACE__ . "\\Operator\\BetweenQueryBuilderOperator",
37
            self::OPERATOR_CONTAINS         => __NAMESPACE__ . "\\Operator\\ContainsQueryBuilderOperator",
38
            self::OPERATOR_ENDS_WITH        => __NAMESPACE__ . "\\Operator\\EndsWithQueryBuilderOperator",
39
            self::OPERATOR_EQUAL            => __NAMESPACE__ . "\\Operator\\EqualQueryBuilderOperator",
40
            self::OPERATOR_GREATER          => __NAMESPACE__ . "\\Operator\\GreaterQueryBuilderOperator",
41
            self::OPERATOR_GREATER_OR_EQUAL => __NAMESPACE__ . "\\Operator\\GreaterOrEqualQueryBuilderOperator",
42
            self::OPERATOR_IN               => __NAMESPACE__ . "\\Operator\\InQueryBuilderOperator",
43
            self::OPERATOR_IS_EMPTY         => __NAMESPACE__ . "\\Operator\\IsEmptyQueryBuilderOperator",
44
            self::OPERATOR_IS_NOT_EMPTY     => __NAMESPACE__ . "\\Operator\\IsNotEmptyQueryBuilderOperator",
45
            self::OPERATOR_IS_NOT_NULL      => __NAMESPACE__ . "\\Operator\\IsNotNullQueryBuilderOperator",
46
            self::OPERATOR_IS_NULL          => __NAMESPACE__ . "\\Operator\\IsNullQueryBuilderOperator",
47
            self::OPERATOR_LESS             => __NAMESPACE__ . "\\Operator\\LessQueryBuilderOperator",
48
            self::OPERATOR_LESS_OR_EQUAL    => __NAMESPACE__ . "\\Operator\\LessOrEqualQueryBuilderOperator",
49
            self::OPERATOR_NOT_BEGINS_WITH  => __NAMESPACE__ . "\\Operator\\NotBeginsWithQueryBuilderOperator",
50
            self::OPERATOR_NOT_BETWEEN      => __NAMESPACE__ . "\\Operator\\NotBetweenQueryBuilderOperator",
51
            self::OPERATOR_NOT_CONTAINS     => __NAMESPACE__ . "\\Operator\\NotContainsQueryBuilderOperator",
52
            self::OPERATOR_NOT_ENDS_WITH    => __NAMESPACE__ . "\\Operator\\NotEndsWithQueryBuilderOperator",
53
            self::OPERATOR_NOT_EQUAL        => __NAMESPACE__ . "\\Operator\\NotEqualQueryBuilderOperator",
54
            self::OPERATOR_NOT_IN           => __NAMESPACE__ . "\\Operator\\NotInQueryBuilderOperator",
55
        ];
56
    }
57
58
    /**
59
     * Enumerate the QueryBuilder types.
60
     *
61
     * @return array Returns the QueryBuilder types enumeration.
62
     */
63
    protected static function enumQueryBuilderTypes(): array {
64
        return [
65
            self::TYPE_BOOLEAN  => __NAMESPACE__ . "\\Type\\BooleanQueryBuilderType",
66
            self::TYPE_DATE     => __NAMESPACE__ . "\\Type\\DateQueryBuilderType",
67
            self::TYPE_DATETIME => __NAMESPACE__ . "\\Type\\DateTimeQueryBuilderType",
68
            self::TYPE_DOUBLE   => __NAMESPACE__ . "\\Type\\DoubleQueryBuilderType",
69
            self::TYPE_INTEGER  => __NAMESPACE__ . "\\Type\\IntegerQueryBuilderType",
70
            self::TYPE_STRING   => __NAMESPACE__ . "\\Type\\StringQueryBuilderType",
71
            self::TYPE_TIME     => __NAMESPACE__ . "\\Type\\TimeQueryBuilderType",
72
        ];
73
    }
74
75
    /**
76
     * Create a QueryBuilder decorator.
77
     *
78
     * @param array $enum The enumeration.
79
     * @param string $key The key.
80
     * @return QueryBuilderDecoratorInterface|null Returns the QueryBuilder decorator in case of success, null otherwise.
81
     * @throws InvalidArgumentException Throws an invalid argument exception if the argument is invalid.
82
     */
83
    protected static function newQueryBuilderDecorator(array $enum, string $key): ?QueryBuilderDecoratorInterface {
84
85
        $class = ArrayHelper::get($enum, $key);
86
        if (null === $class) {
87
            throw new InvalidArgumentException(sprintf('The decorator "%s" is invalid', $key));
88
        }
89
90
        return new $class();
91
    }
92
93
    /**
94
     * Create a QueryBuilder operator.
95
     *
96
     * @param string $operator The Operator.
97
     * @return QueryBuilderDecoratorInterface|null Returns the QueryBuilder operator in case of success, false otherwise.
98
     * @throws InvalidArgumentException Throws an invalid argument exception if the argument is invalid.
99
     */
100
    public static function newQueryBuilderOperator(string $operator): ?QueryBuilderDecoratorInterface {
101
        return static::newQueryBuilderDecorator(static::enumQueryBuilderOperators(), $operator);
102
    }
103
104
    /**
105
     * Create a QueryBuilder type.
106
     *
107
     * @param string $type The type.
108
     * @return QueryBuilderDecoratorInterface|null Returns the QueryBuilder type in case of success, false otherwise.
109
     * @throws InvalidArgumentException Throws an invalid argument exception if the argument is invalid.
110
     */
111
    public static function newQueryBuilderType(string $type): ?QueryBuilderDecoratorInterface {
112
        return static::newQueryBuilderDecorator(static::enumQueryBuilderTypes(), $type);
113
    }
114
}
115