TraceMapper   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
eloc 29
c 1
b 0
f 0
dl 0
loc 51
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A format() 0 15 3
A possibleTraces() 0 25 4
A get() 0 4 1
1
<?php
2
3
namespace Socialblue\LaravelQueryAdviser\DataListener\Services;
4
5
class TraceMapper
6
{
7
    public function get()
8
    {
9
        return $this->format(
10
            $this->possibleTraces()
11
        );
12
    }
13
14
    private function possibleTraces(): array
15
    {
16
        $traces = debug_backtrace(\DEBUG_BACKTRACE_PROVIDE_OBJECT, 25);
17
        krsort($traces);
18
19
        $possibleTraces = array_filter(
20
            $traces,
21
            static function ($trace) {
22
                return isset($trace['file']) &&
23
                    isset($trace['object']) &&
24
                    strpos($trace['file'], base_path('vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php')) !== false;
25
            }
26
        );
27
28
        $currentPossibleTrace = current($possibleTraces);
29
30
        if (! empty($currentPossibleTrace)) {
31
            $calledBy = $traces[key($possibleTraces) + 1];
32
            $currentPossibleTrace['file'] = $calledBy['file'];
33
            $currentPossibleTrace['line'] = $calledBy['line'];
34
            $currentPossibleTrace['function'] = $calledBy['function'];
35
            return [$currentPossibleTrace];
36
        }
37
38
        return $possibleTraces;
39
    }
40
41
    private function format(array $possibleTraces): array
42
    {
43
        array_walk($possibleTraces, static function (&$trace) {
44
            if (method_exists($trace['object'], 'getModel')) {
45
                $a = $trace['object']->getModel();
46
                if (is_string($a)) {
47
                    $trace['model'] = $a;
48
                } else {
49
                    $trace['model'] = get_class($a);
50
                }
51
            }
52
            unset($trace['object']);
53
            unset($trace['args']);
54
        });
55
        return $possibleTraces;
56
    }
57
}
58