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

QueryTracker::track()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.4285
c 0
b 0
f 0
ccs 6
cts 6
cp 1
cc 2
eloc 6
nc 2
nop 1
crap 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