Test Failed
Push — main ( b17b64...c3c525 )
by Teodoro
02:57
created

TaskFactory::find()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 8
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 11
rs 10
1
<?php
2
3
namespace Tleckie\Async;
4
5
use Opis\Closure\SerializableClosure;
6
use Symfony\Component\Process\Process;
7
8
/**
9
 * Class TaskFactory
10
 *
11
 * @package Tleckie\Async
12
 * @author  Teodoro Leckie Westberg <[email protected]>
13
 */
14
class TaskFactory implements TaskFactoryInterface
15
{
16
    /** @var int */
17
    private int $pid = 0;
18
19
    /** @var int */
20
    private int $index = 0;
21
22
    /** @var string|null */
23
    private string|null $script = null;
0 ignored issues
show
Bug introduced by
The type Tleckie\Async\null was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
24
25
    /** @var string|null */
26
    private string|null $autoloader = null;
27
28
    /**
29
     * TaskFactory constructor.
30
     */
31
    public function __construct()
32
    {
33
        $this->autoloader = $this->find('vendor/autoload.php');
34
        $this->script = $this->find('bin/child');
35
    }
36
37
    /**
38
     * @param string $file
39
     * @return string|null
40
     */
41
    protected function find(string $file): ?string
42
    {
43
        $paths = array_filter([
44
            __DIR__ . '/../../../../'.$file,
45
            __DIR__ . '/../../../'.$file,
46
            __DIR__ . '/../../'.$file,
47
            __DIR__ . '/../'.$file,
48
        ], static function (string $path) {
49
            return file_exists($path);
50
        });
51
        return reset($paths);
52
    }
53
54
    /**
55
     * @inheritdoc
56
     */
57
    public function createTask(
58
        $process,
59
        Encoder $encoder,
60
        $binary = PHP_BINARY
61
    ): TaskInterface {
62
        $process = new Process([
63
            $binary,
64
            $this->script,
65
            $this->autoloader,
66
            $encoder->encode(new SerializableClosure($process))
67
        ]);
68
69
        return new Task($process, $encoder, $this->id());
0 ignored issues
show
Bug introduced by
$this->id() of type string is incompatible with the type integer expected by parameter $id of Tleckie\Async\Task::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

69
        return new Task($process, $encoder, /** @scrutinizer ignore-type */ $this->id());
Loading history...
70
    }
71
72
    /**
73
     * @return string
74
     */
75
    protected function id(): string
76
    {
77
        return (++$this->index) . $this->pid();
78
    }
79
80
    /**
81
     * @return string
82
     */
83
    protected function pid(): string
84
    {
85
        $this->pid = $this->pid ?? getmypid();
86
87
        return (string)$this->pid;
88
    }
89
}
90