Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
7.69% covered (danger)
7.69%
1 / 13
CRAP
2.33% covered (danger)
2.33%
1 / 43
Middleware
0.00% covered (danger)
0.00%
0 / 1
7.69% covered (danger)
7.69%
1 / 13
473.01
2.33% covered (danger)
2.33%
1 / 43
 __construct
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 setInterface
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 getInterface
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 3
 setMiddlewareData
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 name
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 info
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 error
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 getId
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 5
 getParentId
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 5
 getLog
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 getError
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 getWarning
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 commandInformations
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 13
1<?php
2
3namespace Qmp\Laravel\CommandsLaravel\Middleware\Core;
4
5use Exception;
6use Illuminate\Support\Facades\App;
7use Qmp\Laravel\CommandsLaravel\Console\Commands\Command;
8use Qmp\Laravel\CommandsLaravel\Middleware\Core\Interfaces\CommandMiddlewareInterface;
9use Qmp\Laravel\CommandsLaravel\Middleware\Core\Interfaces\IOConnectorInterface;
10
11abstract class Middleware implements CommandMiddlewareInterface
12{
13    /**
14     * 
15     */
16    const IS_SYSTEM = ['IS_SYSTEM' => 1];
17
18    /**
19     * The middleware name
20     *
21     * @var string
22     */
23    protected $name;
24
25    /**
26     * The command instance
27     *
28     * @var IOConnectorInterface
29     */
30    protected $interface;
31
32    /**
33     * The middlewarData instances
34     *
35     * @var MiddlewareData
36     */
37    protected $middlewareData;
38
39
40    /**
41     * Undocumented variable
42     *
43     * @var stdClass
44     */
45    protected $data;
46
47    /**
48     * Used in id()
49     *
50     * @var string
51     */
52    protected $idArgument;
53
54    /**
55     * Used in parentId()
56     *
57     * @var string
58     */
59    protected $parentIdArgument;
60
61    /**
62     * Undocumented variable
63     *
64     * @var string
65     */
66    protected $serviceName;
67
68    /**
69     * Undocumented variable
70     *
71     * @var string
72     */
73    protected $messagePrefix = "[Middleware::%s] %s";
74
75    /**
76     *Constructor
77     *
78     * @param Command|null $command
79     */
80    public function __construct()
81    {
82        $this->name = self::name();
83        $this->serviceName = str_replace("-", "_", explode('-laravel', config('micro-services.name'))[0]);
84    }
85
86    /**
87     * Undocumented function
88     *
89     * @param IOConnectorInterface $interface
90     * @return self
91     */
92    protected function setInterface(IOConnectorInterface $interface): self {
93        $this->interface = $interface;
94        $this->setMiddlewareData($this->interface->getMiddlewareData());
95        return $this;
96    }
97
98    /**
99     * Undocumented function
100     *
101     * @return IOConnectorInterface
102     */
103    protected function getInterface(): IOConnectorInterface {
104        if(isset($this->interface)) {
105            return $this->interface;
106        }
107
108        throw new Exception('No IOConnectorInterface found !');
109    }
110
111    /**
112     * Undocumented function
113     *
114     * @param MiddlewareData $data
115     * @return self
116     */
117    protected function setMiddlewareData(MiddlewareData $data) {
118        $this->middlewareData = $data;
119        $this->data = $data->prepare(get_called_class())->get();
120        return $this;
121    }
122
123    /**
124     * Return the name of the current middleware
125     *
126     * @return string
127     */
128    public static function name()
129    {
130        return class_basename(get_called_class());
131    }
132
133    /**
134     * Output info text to the console
135     *
136     * @param string|iterable $message
137     * @return void
138     */
139    protected function info($message)
140    {
141        $this->interface->line(sprintf($this->messagePrefix, self::name(), $message), 'info');
142    }
143
144    /**
145     * Output error text to the console
146     *
147     * @param string|iterable $message
148     * @return void
149     */
150    protected function error($message)
151    {
152        $this->interface->line(sprintf($this->messagePrefix, self::name(), $message), 'error');
153    }
154
155    /**
156     * Return the id stored in data
157     * or setted with $idArgument
158     *
159     * @return string|null
160     */
161    protected function getId()
162    {
163        if (isset($this->data->id)) {
164            return $this->data->id;
165        }
166
167        if (isset($this->idArgument)) {
168            return $this->interface->argument($this->idArgument);
169        }
170
171        return null;
172    }
173
174    /**
175     * Return the parent id stored in data
176     * or setted with $parentIdArgument
177     *
178     * @return string|null
179     */
180    protected function getParentId()
181    {
182        if (isset($this->data->parentId)) {
183            return $this->data->parentId;
184        }
185
186        if (isset($this->parentIdArgument)) {
187            return $this->interface->argument($this->parentIdArgument);
188        }
189
190        return null;
191    }
192
193    /**
194     * Return log key from $this->data or null
195     *
196     * @return mixed
197     */
198    protected function getLog()
199    {
200        return $this->data->log ?? null;
201    }
202
203    /**
204     * Return error key from $this->data or null
205     *
206     * @return mixed
207     */
208    protected function getError()
209    {
210        return $this->data->error ?? null;
211    }
212
213    /**
214     * Return log warning from $this->data or null
215     *
216     * @return mixed
217     */
218    protected function getWarning()
219    {
220        return $this->data->warning ?? null;
221    }
222
223    /**
224     * Get all the command infomartion, return an array with
225     * command type, command name and arguments/options
226     *
227     * @return array
228     */
229    protected function commandInformations($commandType = null): array
230    {
231        $commandType = $commandType ??
232            env('IS_RUNNER', null) == 1
233            ? 'runner'
234            : (env('IS_CRON', null) == 1
235                ? 'cron'
236                : (env('IS_SYSTEM', null) == 1
237                    ? 'system'
238                    : (App::runningInConsole()
239                        ? 'manuel (cli)'
240                        : 'manuel (interface)')));
241
242        return [
243            $commandType,
244            $this->interface->getName(),
245            $this->interface->getArgs()
246        ];
247    }
248}