Passed
Push — master ( cd2ef0...b8142e )
by Bruno
07:52
created

RequiredWithAll   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getMetadata() 0 10 1
A validate() 0 20 6
1
<?php declare(strict_types=1);
2
3
namespace Formularium\Validator;
4
5
use Formularium\Exception\ValidatorException;
6
use Formularium\Field;
7
use Formularium\Model;
8
use Formularium\ValidatorInterface;
9
use Formularium\ValidatorMetadata;
10
11
/**
12
 * The field under validation must be present and not empty only if all of the other specified fields are present.
13
 */
14
class RequiredWithAll implements ValidatorInterface
15 2
{
16
    public function validate($value, array $options = [], Model $model = null)
17 2
    {
18 2
        $expectedFields = $options['fields'];
19 2
        if (!is_array($expectedFields)) {
20 1
            $expectedFields = [$expectedFields];
21
        }
22 2
        $found = true;
23 2
        $data = $model->getData();
0 ignored issues
show
Bug introduced by
The method getData() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

23
        /** @scrutinizer ignore-call */ 
24
        $data = $model->getData();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
24 2
        foreach ($expectedFields as $ef) {
25 2
            if (!array_key_exists($ef, $data)) {
26 1
                $found = false;
27 2
                break;
28
            }
29
        }
30
31 2
        if ($found && empty($value)) {
32 1
            throw new ValidatorException("Field is required when all fields " . implode(',', $expectedFields) . ' are present');
33 1
        }
34
35
        return $value;
36 1
    }
37
38
    public function getMetadata(): ValidatorMetadata
39
    {
40
        return new ValidatorMetadata(
41
            __CLASS__,
42
            "The field under validation must be present and not empty only if all of the other specified fields are present.",
43
            [
44
                new ValidatorArgs(
0 ignored issues
show
Bug introduced by
The type Formularium\Validator\ValidatorArgs was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
45
                    'fields',
46
                    '[String]',
47
                    'The fields that are required with'
48
                )
49
            ]
50
        );
51
    }
52
}
53