Completed
Pull Request — master (#2)
by ARCANEDEV
09:30
created

QueryTracker   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 100%

Importance

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

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getModel() 0 4 1
A track() 0 13 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\AbstractModel;
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
     * Get the model.
21
     *
22
     * @return \Arcanedev\LaravelTracker\Models\Query
23
     */
24 6
    protected function getModel()
25
    {
26 6
        return $this->makeModel(AbstractModel::MODEL_QUERY);
27
    }
28
29
    /* ------------------------------------------------------------------------------------------------
30
     |  Main Functions
31
     | ------------------------------------------------------------------------------------------------
32
     */
33
    /**
34
     * Track the query.
35
     *
36
     * @param  array  $queries
37
     *
38
     * @return int|null
39
     */
40 18
    public function track(array $queries)
41
    {
42 18
        if (count($queries) == 0)
43 15
            return null;
44
45
        $data = [
46 6
            'query'     => $this->prepareQuery($queries),
47 6
            'arguments' => $this->prepareArguments($queries),
48 3
        ];
49
50 6
        return $this->getModel()
51 6
            ->firstOrCreate(Arr::only($data, ['query']), $data)->id;
52
    }
53
54
    /* ------------------------------------------------------------------------------------------------
55
     |  Other Functions
56
     | ------------------------------------------------------------------------------------------------
57
     */
58
    /**
59
     * Prepare the query.
60
     *
61
     * @param  array|string  $queries
62
     *
63
     * @return string
64
     */
65 6
    public function prepareQuery($queries)
66
    {
67 6
        return is_array($queries)
68 6
            ? str_replace(['%5B', '%5D'], ['[', ']'], http_build_query($queries, null, '|'))
69 6
            : $queries;
70
    }
71
72
    /**
73
     * Prepare the arguments.
74
     *
75
     * @param  array  $queries
76
     *
77
     * @return array
78
     */
79 6
    public function prepareArguments(array $queries)
80
    {
81 6
        $arguments = [];
82
83 6
        foreach ($queries as $key => $value) {
84 6
            $arguments[$key] = $this->prepareQuery($value);
85 3
        }
86
87 6
        return $arguments;
88
    }
89
}
90