2 namespace Consolidation\OutputFormatters\Formatters;
4 use Consolidation\OutputFormatters\Validate\ValidationInterface;
5 use Consolidation\OutputFormatters\Options\OverrideOptionsInterface;
6 use Consolidation\OutputFormatters\Options\FormatterOptions;
7 use Consolidation\OutputFormatters\Validate\ValidDataTypesTrait;
8 use Symfony\Component\Console\Output\OutputInterface;
9 use Consolidation\OutputFormatters\StructuredData\RestructureInterface;
14 * This formatter is used as the default action when no
15 * particular formatter is requested. It will print the
16 * provided data only if it is a string; if any other
17 * type is given, then nothing is printed.
19 class StringFormatter implements FormatterInterface, ValidationInterface, OverrideOptionsInterface
22 * All data types are acceptable.
24 public function isValidDataType(\ReflectionClass $dataType)
32 public function write(OutputInterface $output, $data, FormatterOptions $options)
34 if (is_string($data)) {
35 return $output->writeln($data);
37 return $this->reduceToSigleFieldAndWrite($output, $data, $options);
43 public function overrideOptions($structuredOutput, FormatterOptions $options)
45 $defaultField = $options->get(FormatterOptions::DEFAULT_STRING_FIELD, [], '');
46 $userFields = $options->get(FormatterOptions::FIELDS, [FormatterOptions::FIELDS => $options->get(FormatterOptions::FIELD)]);
47 $optionsOverride = $options->override([]);
48 if (empty($userFields) && !empty($defaultField)) {
49 $optionsOverride->setOption(FormatterOptions::FIELDS, $defaultField);
51 return $optionsOverride;
55 * If the data provided to a 'string' formatter is a table, then try
56 * to emit it as a TSV value.
58 * @param OutputInterface $output
60 * @param FormatterOptions $options
62 protected function reduceToSigleFieldAndWrite(OutputInterface $output, $data, FormatterOptions $options)
64 $alternateFormatter = new TsvFormatter();
66 $data = $alternateFormatter->validate($data);
67 $alternateFormatter->write($output, $data, $options);
68 } catch (\Exception $e) {
73 * Always validate any data, though. This format will never
74 * cause an error if it is selected for an incompatible data type; at
75 * worse, it simply does not print any data.
77 public function validate($structuredData)
79 return $structuredData;