OverrideBuilderFactory::create()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 0
loc 10
ccs 6
cts 6
cp 1
rs 9.4285
cc 3
eloc 5
nc 3
nop 4
crap 3
1
<?php
2
3
namespace LaravelDoctrine\Fluent\Builders\Overrides;
4
5
use Doctrine\Common\Persistence\Mapping\ClassMetadata;
6
use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder;
7
use Doctrine\ORM\Mapping\NamingStrategy;
8
use InvalidArgumentException;
9
10
class OverrideBuilderFactory
11
{
12
    /**
13
     * @param ClassMetadataBuilder $builder
14
     * @param NamingStrategy       $namingStrategy
15
     * @param                      $name
16
     * @param callable             $callback
17
     *
18
     * @return
19
     */
20 8
    public static function create(ClassMetadataBuilder $builder, NamingStrategy $namingStrategy, $name, callable $callback)
21
    {
22 8
        foreach (self::getFactories() as $buildable => $check) {
23 8
            if ($check($builder->getClassMetadata(), $name)) {
24 7
                return new $buildable($builder, $namingStrategy, $name, $callback);
25
            }
26 5
        }
27
28 1
        throw new InvalidArgumentException('No attribute or association could be found for ' . $name);
29
    }
30
31
    /**
32
     * @return array
33
     */
34 8
    protected static function getFactories()
35
    {
36
        return [
37
            AttributeOverride::class   => function (ClassMetadata $meta, $name) {
38 8
                return $meta->hasField($name);
39 8
            },
40 8
            AssociationOverride::class => function (ClassMetadata $meta, $name) {
41 5
                return $meta->hasAssociation($name);
42 8
            },
43 8
        ];
44
    }
45
}
46