OverrideBuilderFactory   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 4
c 2
b 0
f 1
lcom 0
cbo 2
dl 0
loc 36
ccs 13
cts 13
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 10 3
A getFactories() 0 11 1
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