Metric::getRequest()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Arcanedev\LaravelMetrics\Metrics;
6
7
use Arcanedev\LaravelMetrics\Concerns\ConvertsToArray;
8
use Arcanedev\LaravelMetrics\Contracts\Metric as MetricContract;
9
use Arcanedev\LaravelMetrics\Metrics\Concerns\HasCachedResults;
10
use Illuminate\Database\Eloquent\Builder;
11
use Illuminate\Http\Request;
12
use Illuminate\Support\Str;
13
use Illuminate\Support\Traits\Macroable;
14
15
/**
16
 * Class     Metric
17
 *
18
 * @author   ARCANEDEV <[email protected]>
19
 */
20
abstract class Metric implements MetricContract
21
{
22
    /* -----------------------------------------------------------------
23
     |  Traits
24
     | -----------------------------------------------------------------
25
     */
26
27
    use Macroable,
28
        ConvertsToArray,
29
        HasCachedResults;
30
31
    /* -----------------------------------------------------------------
32
     |  Properties
33
     | -----------------------------------------------------------------
34
     */
35
36
    /**
37
     * The Http request instance.
38
     *
39
     * @var \Illuminate\Http\Request
40
     */
41
    protected $request;
42
43
    /* -----------------------------------------------------------------
44
     |  Getters & Setters
45
     | -----------------------------------------------------------------
46
     */
47
48
    /**
49
     * Get the metric's title.
50
     *
51
     * @return string
52
     */
53 12
    public function title(): string
54
    {
55 6
        $class = class_basename(static::class);
56
57 12
        return __(Str::title(Str::snake($class, ' ')));
58
    }
59
60
    /**
61
     * Get the Http request instance.
62
     *
63
     * @return \Illuminate\Http\Request
64
     */
65 132
    public function getRequest()
66
    {
67 132
        return $this->request;
68
    }
69
70
    /**
71
     * Set the Http request instance.
72
     *
73
     * @param  \Illuminate\Http\Request  $request
74
     *
75
     * @return $this
76
     */
77 132
    public function setRequest(Request $request)
78
    {
79 132
        $this->request = $request;
80
81 132
        return $this;
82
    }
83
84
    /* -----------------------------------------------------------------
85
     |  Main Methods
86
     | -----------------------------------------------------------------
87
     */
88
89
    /**
90
     * Resolve & calculate the metric.
91
     *
92
     * @param  \Illuminate\Http\Request  $request
93
     *
94
     * @return \Arcanedev\LaravelMetrics\Results\Result|mixed
95
     */
96 132
    public function resolve(Request $request)
97
    {
98 132
        $this->setRequest($request);
99
100 132
        $callback = function () use ($request) {
101 124
            return app()->call([$this, 'calculate'], [
102 124
                'request' => $this->getRequest(),
103
            ]);
104 132
        };
105
106 132
        return ($cacheFor = $this->cacheFor())
107 8
            ? $this->cacheResult($cacheFor, $callback)
108 132
            : $callback();
109
    }
110
111
    /**
112
     * Make a new result instance.
113
     *
114
     * @param  mixed|null  $value
115
     *
116
     * @return \Arcanedev\LaravelMetrics\Results\Result
117
     */
118
    abstract protected function result($value = null);
119
120
    /* -----------------------------------------------------------------
121
     |  Other Methods
122
     | -----------------------------------------------------------------
123
     */
124
125
    /**
126
     * Get the instance as an array.
127
     *
128
     * @return array
129
     */
130 12
    public function toArray(): array
131
    {
132
        return [
133 6
            'class' => static::class,
134 12
            'type'  => $this->type(),
135 12
            'title' => $this->title(),
136
        ];
137
    }
138
139
    /**
140
     * Get the query builder.
141
     *
142
     * @param  \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Builder|string  $model
143
     *
144
     * @return \Illuminate\Database\Eloquent\Builder
145
     */
146 124
    protected static function getQuery($model): Builder
147
    {
148 124
        if (is_string($model))
149 124
            $model = new $model;
150
151 124
        if ($model instanceof Builder)
152
            return $model;
153
154 124
        return $model->newQuery();
155
    }
156
}
157