Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
8 / 8
CRAP
100.00% covered (success)
100.00%
20 / 20
ProcessFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
8 / 8
9
100.00% covered (success)
100.00%
20 / 20
 createProcessFactory
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 addProcess
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 runProcesses
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 startProcesses
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 startDetachedProcesses
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 addEnvs
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 throwExceptionsOnFailure
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 defaultCallback
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
1<?php
2
3namespace Qmp\Laravel\AsyncProcessFactory\Traits;
4
5
6use Closure;
7use Qmp\Laravel\AsyncProcessFactory\Factory;
8use Qmp\Laravel\AsyncProcessFactory\Exceptions\ProcessFactoryNotFoundException;
9
10trait ProcessFactory
11{
12
13    /**
14     * The processFactory that hold and create Processes
15     *
16     * @var Qmp\Laravel\AsyncProcessFactory\Factory
17     */
18    protected $processFactory;
19
20    /**
21     * Instantiate the ProcessFactory
22     *
23     * @param string $command
24     * @return Factory
25     */
26    protected function createProcessFactory(string $command): Factory
27    {
28        $this->processFactory = app()->make(Factory::class, ['command' => $command]);
29        return $this->processFactory;
30    }
31
32    /**
33     * Add A new Process to the factory
34     *
35     * @param array $options
36     * @return void
37     */
38    protected function addProcess(array $options): void
39    {
40        if (!$this->processFactory) {
41            throw new ProcessFactoryNotFoundException('Factory must be instantiated first !');
42        }
43
44        $this->processFactory->addProcess($options);
45    }
46    /**
47     * Run processes one by one
48     *
49     * @param callable $callback
50     * @return void
51     */
52    protected function runProcesses(callable $callback = null): void
53    {
54        $callback = $callback ?? Closure::fromCallable([$this, 'defaultCallback']);
55        $this->processFactory->run($callback);
56    }
57
58    /**
59     * Run Processes in parralel
60     *
61     * @param callable $callback
62     * @return void
63     */
64    protected function startProcesses(callable $callback = null): void
65    {
66        $callback = $callback ?? Closure::fromCallable([$this, 'defaultCallback']);
67        $this->processFactory->start($callback);
68    }
69
70    /**
71     * Run Processes in parralel
72     *
73     * @param callable $callback
74     * @return void
75     */
76    protected function startDetachedProcesses(): void
77    {
78        $this->processFactory->startDetached();
79    }
80
81    /**
82     * Add envs to process
83     *
84     * @param array $envs
85     * @return void
86     */
87    protected function addEnvs(array $envs): void
88    {
89        $this->processFactory->addEnvs($envs);
90    }
91
92    /**
93     * Throw SubprocessException on failure
94     *
95     * @param boolean $throw
96     * @return void
97     */
98    protected function throwExceptionsOnFailure($throw = true)
99    {
100        $this->processFactory->throwExceptionsOnFailure($throw);
101    }
102
103    /**
104     * The default process callback when stderr/stdout
105     *
106     * @param string $datas
107     * @return void
108     */
109    protected function defaultCallback(string $datas): void
110    {
111        $this->info($datas);
112    }
113}