Completed
Push — master ( 265b9c...70421f )
by ARCANEDEV
11:53
created

QueryTracker   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 3
dl 0
loc 61
rs 10
c 0
b 0
f 0
ccs 16
cts 16
cp 1

3 Methods

Rating   Name   Duplication   Size   Complexity  
A track() 0 11 2
A prepareQuery() 0 6 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\Models\Query;
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 implements QueryTrackerContract
14
{
15
    /* ------------------------------------------------------------------------------------------------
16
     |  Main Functions
17
     | ------------------------------------------------------------------------------------------------
18
     */
19
    /**
20
     * Track the query.
21
     *
22
     * @param  array  $queries
23
     *
24
     * @return int|null
25
     */
26 12
    public function track(array $queries)
27
    {
28 12
        if (count($queries) == 0) return null;
29
30
        $data = [
31 6
            'query'     => $this->prepareQuery($queries),
32 6
            'arguments' => $this->prepareArguments($queries),
33 3
        ];
34
35 6
        return Query::firstOrCreate(Arr::only($data, ['query']), $data)->id;
36
    }
37
38
    /* ------------------------------------------------------------------------------------------------
39
     |  Other Functions
40
     | ------------------------------------------------------------------------------------------------
41
     */
42
    /**
43
     * Prepare the query.
44
     *
45
     * @param  array|string  $queries
46
     *
47
     * @return string
48
     */
49 6
    public function prepareQuery($queries)
50
    {
51 6
        return is_array($queries)
52 6
            ? str_replace(['%5B', '%5D'], ['[', ']'], http_build_query($queries, null, '|'))
53 6
            : $queries;
54
    }
55
56
    /**
57
     * Prepare the arguments.
58
     *
59
     * @param  array  $queries
60
     *
61
     * @return array
62
     */
63 6
    public function prepareArguments(array $queries)
64
    {
65 6
        $arguments = [];
66
67 6
        foreach ($queries as $key => $value) {
68 6
            $arguments[$key] = $this->prepareQuery($value);
69 3
        }
70
71 6
        return $arguments;
72
    }
73
}
74