Passed
Push — master ( 02c0e5...5db183 )
by Stefan
01:17 queued 11s
created

ModelsMassAssignment   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 18
c 0
b 0
f 0
dl 0
loc 34
rs 10
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A value() 0 27 1
A name() 0 3 1
1
<?php declare(strict_types=1);
2
3
namespace Wnx\LaravelStats\ShareableMetrics\Metrics;
4
5
use ReflectionProperty;
6
use Wnx\LaravelStats\Contracts\CollectableMetric;
7
use Wnx\LaravelStats\ValueObjects\ClassifiedClass;
8
9
class ModelsMassAssignment extends Metric implements CollectableMetric
10
{
11
    public function name(): string
12
    {
13
        return 'models_mass_assignment';
14
    }
15
16
    public function value()
17
    {
18
        return $this->project
19
            ->classifiedClasses()
20
            ->filter(function (ClassifiedClass $classifiedClass) {
21
                return $classifiedClass->classifier->name() === 'Models';
22
            })
23
            ->map(function (ClassifiedClass $classifiedClass) {
24
25
                // Collect all properties of the given class,
26
                // filter to only keep "guarded" and "fillable"
27
                // and only keep those which have been set by the developer.
28
                return collect($classifiedClass->reflectionClass->getProperties())
29
                    ->filter(function (ReflectionProperty $property) {
30
                        return in_array($property->getName(), ['guarded', 'fillable']);
31
                    })
32
                    ->filter(function (ReflectionProperty $property) use ($classifiedClass) {
33
                        return $property->class === $classifiedClass->reflectionClass->name;
34
                    })
35
                    ->toArray();
36
            })
37
            ->filter()
38
            ->flatten(1)
39
            ->countBy(function (ReflectionProperty $property) {
40
                return $property->getName();
41
            })
42
            ->toArray();
43
    }
44
}
45