Passed
Push — develop ( 00d2f1...1275e7 )
by Daniel
05:07
created

ClassNameValidator   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Test Coverage

Coverage 80%

Importance

Changes 0
Metric Value
dl 0
loc 40
ccs 12
cts 15
cp 0.8
rs 10
c 0
b 0
f 0
wmc 8

2 Methods

Rating   Name   Duplication   Size   Complexity  
A isClassSame() 0 12 4
A validate() 0 11 4
1
<?php
2
3
namespace Silverback\ApiComponentBundle\Validator;
4
5
use ProxyManager\Proxy\LazyLoadingInterface;
6
use Symfony\Component\Validator\Exception\InvalidArgumentException;
7
8
class ClassNameValidator
9
{
10
    /**
11
     * @param string $className
12
     * @param $validClass
13
     * @return bool
14
     * @throws \ReflectionException
15
     */
16 1
    public static function isClassSame(string $className, $validClass): bool
17
    {
18 1
        if (\get_class($validClass) === $className) {
19 1
            return true;
20
        }
21 1
        if (\in_array(LazyLoadingInterface::class, class_implements($validClass), true)) {
22 1
            $refl = new \ReflectionClass($validClass);
23 1
            if ($refl->isSubclassOf($className)) {
24 1
                return true;
25
            }
26
        }
27
        return false;
28
    }
29
30
    /**
31
     * @param string $className
32
     * @param iterable $validClasses
33
     * @return bool
34
     * @throws \Symfony\Component\Validator\Exception\InvalidArgumentException
35
     * @throws \ReflectionException
36
     */
37 1
    public static function validate(string $className, iterable $validClasses): bool
38
    {
39 1
        if (!class_exists($className)) {
40
            throw new InvalidArgumentException(sprintf('The class %s does not exist', $className));
41
        }
42 1
        foreach ($validClasses as $validClass) {
43 1
            if (self::isClassSame($className, $validClass)) {
44 1
                return true;
45
            }
46
        }
47
        return false;
48
    }
49
}
50