Completed
Branch master (f97dd7)
by Nuno
04:04 queued 01:50
created

Catalog   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 5

Importance

Changes 0
Metric Value
wmc 5
lcom 2
cbo 5
dl 0
loc 89
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 13 1
A isEmpty() 0 4 1
A displayTable() 0 6 1
A displayDetail() 0 13 2
1
<?php
2
3
namespace LaravelMeetups\Interactions;
4
5
use LaravelMeetups\Contracts\Interactions\Catalog as Contract;
6
use Symfony\Component\Console\Output\OutputInterface;
7
use Symfony\Component\Console\Input\InputInterface;
8
use Symfony\Component\Console\Style\SymfonyStyle;
9
use LaravelMeetups\Contracts\Config;
10
use LaravelMeetups\Jobs;
11
12
13
class Catalog implements Contract
14
{
15
    /**
16
     * Holds a instance of config.
17
     *
18
     * @var Config
19
     */
20
    private $config;
21
22
    /**
23
     * Holds a instance of InputInterface.
24
     *
25
     * @var InputInterface
26
     */
27
    private $input;
28
29
    /**
30
     * Holds a instance of OutputInterface.
31
     *
32
     * @var OutputInterface
33
     */
34
    private $output;
35
36
    /**
37
     * Holds an array of instances of Bag.
38
     *
39
     * @var array
40
     */
41
    private $bags;
42
43
    /**
44
     * @var Jobs\Catalog\Writer
45
     */
46
    private $catalogWriter;
47
48
    /**
49
     * {@inheritdoc}
50
     */
51
    public function __construct(Config $config, InputInterface $input, OutputInterface $output)
52
    {
53
        $this->config = $config;
54
        $this->input = $input;
55
        $this->output = $output;
56
        $this->bags = (new Jobs\Catalog\Search($config, $input))->execute();
57
58
        $rows = array_map(function($bag) {
59
            return $bag->getRows();
60
        }, $this->bags);
61
62
        $this->catalogWriter = (new Jobs\Catalog\Writer($config, new SymfonyStyle($input, $output)))->setRows($rows);
63
    }
64
65
    /**
66
     * Checks if the catalog is empty.
67
     *
68
     * @return bool
69
     */
70
    public function isEmpty()
71
    {
72
        return empty($this->catalogWriter->getRows());
73
    }
74
75
    /**
76
     * {@inheritdoc}
77
     */
78
    public function displayTable()
79
    {
80
        $this->catalogWriter->write();
81
82
        return $this;
83
    }
84
85
    /**
86
     * {@inheritdoc}
87
     */
88
    public function displayDetail($rowKey)
89
    {
90
        if (isset($this->bags[$rowKey - 1])) {
91
            $rows = (new Jobs\Detail\Search($this->config, $this->input, $this->bags[$rowKey - 1]
92
                ->getDom()))
93
                ->execute();
94
            (new Jobs\Detail\Writer($this->config, new SymfonyStyle($this->input, $this->output)))
95
                ->setRows($rows)
96
                ->write();
97
        }
98
99
        return $this;
100
    }
101
}