Completed
Push — master ( 11a0f2...1d683d )
by Karl
10s
created

JobFilter   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 0
dl 0
loc 41
ccs 12
cts 12
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A filterFields() 0 9 2
A sort() 0 13 1
1
<?php namespace JobApis\JobsToMail\Filters;
2
3
class JobFilter
4
{
5
    /**
6
     * Returns an array of jobs each with only the attributes specified
7
     *
8
     * @param array $jobs
9
     * @param array $fields
10
     *
11
     * @return array
12
     */
13 1
    public function filterFields($jobs = [], $fields = [])
14
    {
15 1
        foreach ($jobs as &$job) {
16
            $job = array_filter($job, function ($key) use ($fields) {
17 1
                return in_array($key, $fields);
18 1
            }, ARRAY_FILTER_USE_KEY);
19
        }
20 1
        return $jobs;
21
    }
22
23
    /**
24
     * Sort jobs by date posted, desc
25
     *
26
     * @param array $jobs
27
     *
28
     * @return array
29
     */
30 2
    public function sort($jobs = [], $maxAge = 14, $maxJobs = 50)
31
    {
32
        // Sort by date
33
        usort($jobs, function ($item1, $item2) {
34 2
            return $item2->datePosted <=> $item1->datePosted;
35 2
        });
36
        // Filter any older than max age
37 2
        $jobs = array_filter($jobs, function ($job) use ($maxAge) {
38 2
            return $job->datePosted > new \DateTime($maxAge.' days ago');
39 2
        });
40
        // Truncate to the max number of results
41 2
        return array_slice($jobs, 0, $maxJobs);
42
    }
43
}
44