Completed
Push — feature/musicbrainz ( 6260da...0226fa )
by Oguzhan
04:56
created

BaseCommand   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 10
c 2
b 0
f 0
lcom 1
cbo 6
dl 0
loc 81
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A initializeMusicInfo() 0 6 1
A configure() 0 13 2
A initialize() 0 8 2
A generateTableForSearchResult() 0 10 2
A generateTableRows() 0 14 3
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: oguzu
5
 * Date: 27-3-2017
6
 * Time: 16:52
7
 */
8
9
namespace Pbxg33k\MusicInfo\Command;
10
11
12
use Pbxg33k\MusicInfo\MusicInfo;
13
use Pbxg33k\Traits\HydratableTrait;
14
use Pbxg33k\Traits\PropertyTrait;
15
use Psr\Log\LoggerInterface;
16
use Symfony\Component\Console\Command\Command;
17
use Symfony\Component\Console\Helper\Table;
18
use Symfony\Component\Console\Input\InputInterface;
19
use Symfony\Component\Console\Input\InputOption;
20
use Symfony\Component\Console\Output\OutputInterface;
21
use Symfony\Component\Debug\Debug;
22
use Symfony\Component\Yaml\Yaml;
23
24
abstract class BaseCommand extends Command
25
{
26
    const COMMAND_PREFIX = 'music-info';
27
28
    const COMMAND_NAME = 'undefined';
29
30
    const COMMAND_DESCRIPTION = 'Description not set';
31
32
    /**
33
     * @var MusicInfo
34
     */
35
    protected $musicInfo;
36
37
    protected function initializeMusicInfo()
38
    {
39
        $config = Yaml::parse(file_get_contents(__DIR__ . '/../Resources/config/config.yml'));
40
41
        $this->musicInfo = new MusicInfo($config['music_info']);
42
    }
43
44
    protected function configure()
45
    {
46
        if (!$this->musicInfo) {
47
            $this->initializeMusicInfo();
48
        }
49
50
        $this
51
            ->setName(static::COMMAND_PREFIX . ':' . static::COMMAND_NAME)
52
            ->setDescription(static::COMMAND_DESCRIPTION)
53
            ->addOption('debug', 'd', InputOption::VALUE_NONE, 'Enables debug mode');
54
55
        parent::configure();
56
    }
57
58
    protected function initialize(InputInterface $input, OutputInterface $output)
59
    {
60
        if ($input->getOption('debug')) {
61
            Debug::enable();
62
        }
63
64
        parent::initialize($input, $output);
65
    }
66
67
    /**
68
     * @param       $collection
69
     * @param       $columns
70
     * @param Table      $table
71
     * @return Table
72
     */
73
    protected function generateTableForSearchResult($collection, $columns, Table $table)
74
    {
75
        $table->setHeaders(array_values($columns));
76
77
        foreach ($collection as $service => $serviceResult) {
78
            $table = $this->generateTableRows($serviceResult, $columns, $table);
79
        }
80
81
        return $table;
82
    }
83
84
    /**
85
     * @param       $collection
86
     * @param       $columns
87
     * @param Table      $table
88
     * @return Table
89
     */
90
    protected function generateTableRows($collection, $columns, Table $table)
91
    {
92
        foreach ($collection as $item) {
93
            $row = [];
94
95
            foreach ($columns as $columnKey => $columnValue) {
96
                $row[] = $item->getPropertyValue($columnKey);
97
            }
98
99
            $table->addRow($row);
100
        }
101
102
        return $table;
103
    }
104
}
105