Completed
Push — master ( 77fa1d...4c135b )
by ARCANEDEV
08:34
created

QueryTracker::saveArguments()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.4285
c 0
b 0
f 0
ccs 9
cts 9
cp 1
cc 2
eloc 7
nc 2
nop 2
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 Arcanedev\LaravelTracker\Models\QueryArgument;
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
        /** @var \Arcanedev\LaravelTracker\Models\Query $query */
31 6
        $query = Query::firstOrCreate([
32 6
            'query' => $this->prepareArguments($queries)
33 3
        ]);
34
35 6
        $this->saveArguments($query, $queries);
36
37 6
        return $query->id;
38
    }
39
40
    /* ------------------------------------------------------------------------------------------------
41
     |  Other Functions
42
     | ------------------------------------------------------------------------------------------------
43
     */
44
    /**
45
     * Set the query arguments.
46
     *
47
     * @param  \Arcanedev\LaravelTracker\Models\Query  $query
48
     * @param  array                                   $queries
49
     *
50
     * @return array
51
     */
52 6
    private function saveArguments($query, array $queries)
53
    {
54 6
        $arguments = [];
55
56 6
        foreach ($queries as $argument => $value) {
57 6
            $arguments[] = new QueryArgument([
58 6
                'argument' => $argument,
59 6
                'value'    => $this->prepareArguments($value),
60 3
            ]);
61 3
        }
62
63 6
        return $query->arguments()->saveMany($arguments);
64
    }
65
66
    /**
67
     * Prepare the query arguments.
68
     *
69
     * @param  array|string  $queries
70
     *
71
     * @return string
72
     */
73 6
    private function prepareArguments($queries)
74
    {
75 6
        return is_array($queries)
76 6
            ? str_replace(['%5B', '%5D'], ['[', ']'], http_build_query($queries, null, '|'))
77 6
            : $queries;
78
    }
79
}
80