Completed
Push — master ( 079626...bbb9de )
by Níckolas Daniel
04:49
created

JigsawPostRepository::byCategory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 6
ccs 5
cts 5
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace PODEntender\Infrastructure\Domain\Model\Post;
4
5
use PODEntender\Domain\Model\Post\PostRepository;
6
7
use PODEntender\Domain\Model\Post\AudioEpisodeCollection;
8
use PODEntender\Domain\Model\Post\Post;
9
use PODEntender\Domain\Model\Post\PostCollection;
10
use PODEntender\Infrastructure\Domain\Factory\JigsawPostFactory;
11
use TightenCo\Jigsaw\Jigsaw;
12
use TightenCo\Jigsaw\PageVariable;
13
14
class JigsawPostRepository implements PostRepository
15
{
16
    private $jigsaw;
17
18
    private $jigsawPostFactory;
19
20 4
    public function __construct(Jigsaw $jigsaw, JigsawPostFactory $jigsawPostFactory)
21
    {
22 4
        $this->jigsaw = $jigsaw;
23 4
        $this->jigsawPostFactory = $jigsawPostFactory;
24 4
    }
25
26 2
    private function jigsawCollectionToPostCollection(PageVariable $collection): PostCollection
27
    {
28 2
        return new PostCollection(
29
            $collection
30
                ->map(function (PageVariable $post) {
31 2
                    return $this->jigsawPostFactory->newPostFromPageVariable($post);
32 2
                })
33 2
                ->toArray()
34
        );
35
    }
36
37 1
    private function jigsawCollectionToAudioEpisodeCollection(PageVariable $collection): AudioEpisodeCollection
38
    {
39 1
        return new AudioEpisodeCollection(
40
            $collection
41
                ->map(function (PageVariable $post) {
42 1
                    return $this->jigsawPostFactory->newAudioEpisodeFromPageVariable($post);
43 1
                })
44 1
                ->toArray()
45
        );
46
    }
47
48 1
    public function latestPost(): Post
49
    {
50 1
        return $this->jigsawPostFactory->newPostFromPageVariable(
51 1
            $this->jigsaw
52 1
                ->getCollection('episodes')
53 1
                ->sortByDesc('postDate')
54 1
                ->first()
55
        );
56
    }
57
58 1
    public function latestPosts(int $amount): PostCollection
59
    {
60 1
        return $this->jigsawCollectionToPostCollection(
61 1
            $this->jigsaw
62 1
                ->getCollection('episodes')
63 1
                ->sortByDesc('postDate')
64 1
                ->take($amount)
65
        );
66
    }
67
68 1
    public function byCategory(string $category): PostCollection
69
    {
70 1
        return $this->jigsawCollectionToPostCollection(
71 1
            $this->jigsaw
72 1
                ->getCollection('episodes')
73 1
                ->whereStrict('category', $category)
74
        );
75
    }
76
77 1
    public function withAudio(): AudioEpisodeCollection
78
    {
79 1
        return $this->jigsawCollectionToAudioEpisodeCollection(
80 1
            $this->jigsaw
81 1
                ->getCollection('episodes')
82
                ->filter(function (PageVariable $page) {
83 1
                    return !is_null($page->episode['audioUrl']);
84 1
                })
85
        );
86
    }
87
}
88