significantToSerialization()   D
last analyzed

Complexity

Conditions 21
Paths 21

Size

Total Lines 30
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 21
eloc 24
nc 21
nop 1
dl 0
loc 30
rs 4.1666
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace AlgoWeb\ODataMetadata\Csdl\Internal\Serialization;
6
7
use AlgoWeb\ODataMetadata\Edm\Validation\EdmError;
8
use AlgoWeb\ODataMetadata\Edm\Validation\EdmErrorCode;
9
use AlgoWeb\ODataMetadata\Edm\Validation\EdmValidator;
10
use AlgoWeb\ODataMetadata\Edm\Validation\Internal\ValidationHelper;
11
use AlgoWeb\ODataMetadata\Edm\Validation\ValidationRuleSet;
12
use AlgoWeb\ODataMetadata\Interfaces\IModel;
13
14
abstract class SerializationValidator
15
{
16
    private static function getSerializationRuleSet(): ValidationRuleSet
17
    {
18
        return new ValidationRuleSet([]);
19
    }
20
21
    /**
22
     * @param  IModel               $root
23
     * @throws \ReflectionException
24
     * @return array
25
     */
26
    public static function getSerializationErrors(IModel $root): array
27
    {
28
        $errors = [];
29
        EdmValidator::validate($root, self::getSerializationRuleSet(), $errors);
30
        $errors = array_filter($errors, [self::class, 'significantToSerialization']);
31
        return $errors;
32
    }
33
34
    /**
35
     * @param  EdmError $error
36
     * @return bool
37
     */
38
    private static function significantToSerialization(EdmError $error)
39
    {
40
        if (ValidationHelper::isInterfaceCritical($error)) {
41
            return true;
42
        }
43
44
        switch ($error->getErrorCode()) {
45
            case EdmErrorCode::InvalidName():
46
            case EdmErrorCode::NameTooLong():
47
            case EdmErrorCode::InvalidNamespaceName():
48
            case EdmErrorCode::SystemNamespaceEncountered():
49
            case EdmErrorCode::RowTypeMustNotHaveBaseType():
50
            case EdmErrorCode::ReferencedTypeMustHaveValidName():
51
            case EdmErrorCode::FunctionImportEntitySetExpressionIsInvalid():
52
            case EdmErrorCode::FunctionImportParameterIncorrectType():
53
            case EdmErrorCode::OnlyInputParametersAllowedInFunctions():
54
            case EdmErrorCode::InvalidFunctionImportParameterMode():
55
            case EdmErrorCode::TypeMustNotHaveKindOfNone():
56
            case EdmErrorCode::PrimitiveTypeMustNotHaveKindOfNone():
57
            case EdmErrorCode::PropertyMustNotHaveKindOfNone():
58
            case EdmErrorCode::TermMustNotHaveKindOfNone():
59
            case EdmErrorCode::SchemaElementMustNotHaveKindOfNone():
60
            case EdmErrorCode::EntityContainerElementMustNotHaveKindOfNone():
61
            case EdmErrorCode::BinaryValueCannotHaveEmptyValue():
62
            case EdmErrorCode::EnumMustHaveIntegerUnderlyingType():
63
            case EdmErrorCode::EnumMemberTypeMustMatchEnumUnderlyingType():
64
                return true;
65
        }
66
67
        return false;
68
    }
69
}
70