Skip to content

Commit 9f8dbb7

Browse files
FEATURE: convenience getter functions
1 parent aec5f1d commit 9f8dbb7

3 files changed

Lines changed: 91 additions & 9 deletions

File tree

Classes/Dto/Jobs.php

Lines changed: 75 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*/
1111
class Jobs implements \IteratorAggregate
1212
{
13+
1314
/**
1415
* @var Job[]
1516
*/
@@ -20,7 +21,6 @@ private function __construct(array $jobs)
2021
$this->jobs = $jobs;
2122
}
2223

23-
2424
public static function fromJsonArray(array $in): self
2525
{
2626
$converted = [];
@@ -42,22 +42,90 @@ public function forPipeline(PipelineName $pipeline): Jobs
4242
return new self($filteredJobs);
4343
}
4444

45+
/**
46+
* @return Jobs all scheduled jobs not yet started
47+
*/
48+
public function waiting(): Jobs
49+
{
50+
return $this->filter(function (Job $job) {
51+
return !$job->getStart();
52+
});
53+
}
54+
4555
/**
4656
* Filter running jobs
4757
*
4858
* @return Jobs
4959
*/
5060
public function running(): Jobs
5161
{
52-
$filteredJobs = [];
53-
foreach ($this->jobs as $job) {
62+
return $this->filter(function (Job $job) {
5463
// running = started jobs which have not finished.
55-
if ($job->getStart() !== null && !$job->getEnd()) {
56-
$filteredJobs[] = $job;
64+
return $job->getStart() !== null && !$job->getEnd();
65+
});
66+
}
67+
68+
/**
69+
* @return Jobs successful, canceled and failed jobs
70+
*/
71+
public function completed(): Jobs
72+
{
73+
return $this->filter(function (Job $job) {
74+
return $job->isCompleted();
75+
});
76+
}
77+
78+
/**
79+
* @return Jobs successfully completed jobs
80+
*/
81+
public function successful(): Jobs
82+
{
83+
return $this->filter(function (Job $job) {
84+
return $job->isCompleted() && !$job->isErrored() && !$job->isCanceled();
85+
});
86+
}
87+
88+
/**
89+
* @return Jobs canceled jobs
90+
*/
91+
public function canceled(): Jobs
92+
{
93+
return $this->filter(function (Job $job) {
94+
return $job->isCanceled();
95+
});
96+
}
97+
98+
/**
99+
* @return Jobs failed jobs
100+
*/
101+
public function errored(): Jobs
102+
{
103+
return $this->filter(function (Job $job) {
104+
return $job->isErrored();
105+
});
106+
}
107+
108+
/**
109+
* @param callable $predicate function(Job $job): bool
110+
* @return Jobs all jobs where $predicate($job)
111+
*/
112+
public function filter(callable $predicate): Jobs
113+
{
114+
$result = [];
115+
foreach ($this->jobs as $job) {
116+
if ($predicate($job)) {
117+
$result[] = $job;
57118
}
58119
}
120+
return new self($result);
121+
}
59122

60-
return new self($filteredJobs);
123+
/**
124+
* @return Job[]
125+
*/
126+
public function getArray(): array
127+
{
128+
return $this->jobs;
61129
}
62130

63131
/**
@@ -67,4 +135,4 @@ public function getIterator()
67135
{
68136
return new \ArrayIterator($this->jobs);
69137
}
70-
}
138+
}

Classes/Dto/Pipelines.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ public static function fromJsonArray(array $in): self
2424
return $pipelines;
2525
}
2626

27+
/**
28+
* @return Pipeline[]
29+
*/
30+
public function getArray(): array
31+
{
32+
return $this->pipelines;
33+
}
2734

2835
/**
2936
* @return \Iterator<Pipeline>
@@ -32,4 +39,4 @@ public function getIterator()
3239
{
3340
return new \ArrayIterator($this->pipelines);
3441
}
35-
}
42+
}

Classes/Dto/TaskResults.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,13 @@ public function get(string $taskName): ?TaskResult
138138

139139
}
140140

141+
/**
142+
* @return TaskResult[]
143+
*/
144+
public function getArray(): array {
145+
return $this->taskResults;
146+
}
147+
141148
/**
142149
* @return \Iterator<TaskResult>
143150
*/
@@ -156,4 +163,4 @@ public function allowsCallOfMethod($methodName)
156163
return true;
157164
}
158165

159-
}
166+
}

0 commit comments

Comments
 (0)