QueryTracker   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 5
dl 0
loc 82
rs 10
c 0
b 0
f 0
ccs 20
cts 20
cp 1

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getModel() 0 4 1
A prepareQuery() 0 6 2
A track() 0 15 2
A prepareArguments() 0 10 2
1
<?php namespace Arcanedev\LaravelTracker\Trackers;
2
3
use Arcanedev\LaravelTracker\Contracts\Trackers\QueryTracker as QueryTrackerContract;
4
use Arcanedev\LaravelTracker\Support\BindingManager;
5
use Illuminate\Support\Arr;
6
7
/**
8
 * Class     QueryTracker
9
 *
10
 * @package  Arcanedev\LaravelTracker\Trackers
11
 * @author   ARCANEDEV <[email protected]>
12
 */
13
class QueryTracker extends AbstractTracker implements QueryTrackerContract
14
{
15
    /* -----------------------------------------------------------------
16
     |  Getters and Setters
17
     | -----------------------------------------------------------------
18
     */
19
20
    /**
21
     * Get the model.
22
     *
23
     * @return \Arcanedev\LaravelTracker\Models\Query
24
     */
25 3
    protected function getModel()
26
    {
27 3
        return $this->makeModel(BindingManager::MODEL_QUERY);
28
    }
29
30
    /* -----------------------------------------------------------------
31
     |  Main Methods
32
     | -----------------------------------------------------------------
33
     */
34
35
    /**
36
     * Track the query.
37
     *
38
     * @param  array  $queries
39
     *
40
     * @return int|null
41
     */
42 9
    public function track(array $queries)
43
    {
44 9
        if (count($queries) == 0)
45 6
            return null;
46
47
        $data = [
48 3
            'query'     => $this->prepareQuery($queries),
49 3
            'arguments' => $this->prepareArguments($queries),
50
        ];
51
52 3
        return $this->getModel()
53 3
            ->newQuery()
54 3
            ->firstOrCreate(Arr::only($data, ['query']), $data)
55 3
            ->getKey();
56
    }
57
58
    /* -----------------------------------------------------------------
59
     |  Other Methods
60
     | -----------------------------------------------------------------
61
     */
62
63
    /**
64
     * Prepare the query.
65
     *
66
     * @param  array|string  $queries
67
     *
68
     * @return string
69
     */
70 3
    public function prepareQuery($queries)
71
    {
72 3
        return is_array($queries)
73 3
            ? str_replace(['%5B', '%5D'], ['[', ']'], http_build_query($queries, null, '|'))
74 3
            : $queries;
75
    }
76
77
    /**
78
     * Prepare the arguments.
79
     *
80
     * @param  array  $queries
81
     *
82
     * @return array
83
     */
84 3
    public function prepareArguments(array $queries)
85
    {
86 3
        $arguments = [];
87
88 3
        foreach ($queries as $key => $value) {
89 3
            $arguments[$key] = $this->prepareQuery($value);
90
        }
91
92 3
        return $arguments;
93
    }
94
}
95