1010 */
1111class 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+ }
0 commit comments