CommandBase.php
3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
namespace Grasmash\YamlCli\Command;
use Dflydev\DotAccessData\Data;
use Grasmash\YamlCli\Loader\JsonFileLoader;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\FormatterHelper;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Yaml\Yaml;
/**
* Class CommandBase
*
* @package Grasmash\YamlCli\Command
*/
abstract class CommandBase extends Command
{
/** @var Filesystem */
protected $fs;
/**
* @var InputInterface
*/
protected $input;
/**
* @var OutputInterface
*/
protected $output;
/** @var FormatterHelper */
protected $formatter;
/**
* Initializes the command just after the input has been validated.
*
* @param InputInterface $input An InputInterface instance
* @param OutputInterface $output An OutputInterface instance
*/
protected function initialize(InputInterface $input, OutputInterface $output)
{
$this->input = $input;
$this->output = $output;
$this->formatter = $this->getHelper('formatter');
$this->fs = new Filesystem();
}
/**
* Loads a yaml file.
*
* @param $filename
* The file name.
*
* @return array|bool
* The parsed content of the yaml file. FALSE if an error occured.
*/
public function loadYamlFile($filename)
{
if (!file_exists($filename)) {
$this->output->writeln("<error>The file $filename does not exist.</error>");
return false;
}
try {
$contents = Yaml::parse(file_get_contents($filename));
} catch (\Exception $e) {
$this->output->writeln("<error>There was an error parsing $filename. The contents are not valid YAML.</error>");
$this->output->writeln($e->getMessage());
return false;
}
return $contents;
}
/**
* Writes YAML data to a file.
*
* @param string $filename
* The filename.
* @param Data $data
* The YAML file contents.
*
* @return bool
* TRUE if file was written successfully. Otherwise, FALSE.
*/
public function writeYamlFile($filename, $data)
{
try {
// @todo Allow the inline and indent variables to be set via command line option.
$yaml = Yaml::dump($data->export(), 3, 2);
} catch (\Exception $e) {
$this->output->writeln("<error>There was an error dumping the YAML contents for $filename.</error>");
$this->output->writeln($e->getMessage());
return false;
}
try {
// @todo Use Symfony file system instead so that exceptions can be caught.
file_put_contents($filename, $yaml);
} catch (\Exception $e) {
$this->output->writeln("<error>There was an writing to $filename.</error>");
$this->output->writeln($e->getMessage());
return false;
}
return true;
}
/**
* Checks if a key exists in an array.
*
* Supports dot notation for keys. E.g., first.second.parts.
*
* @param array $data
* The array of data that may contain key.
* @param string $key
* The array key, optionally in dot notation format.
*
* @return bool
*
*/
protected function checkKeyExists($data, $key)
{
if (!$data->has($key)) {
$this->output->writeln("<error>The key $key does not exist.");
return false;
}
return true;
}
}