Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / vendor / consolidation / output-formatters / src / Formatters / StringFormatter.php
index 142bee4c38e14e2c9b4a494bf752133d176c5eaa..1a008d985c107cfcb38f63f765aa2175e60ffe21 100644 (file)
@@ -1,12 +1,15 @@
 <?php
 namespace Consolidation\OutputFormatters\Formatters;
 
-use Consolidation\OutputFormatters\Validate\ValidationInterface;
-use Consolidation\OutputFormatters\Options\OverrideOptionsInterface;
 use Consolidation\OutputFormatters\Options\FormatterOptions;
+use Consolidation\OutputFormatters\Options\OverrideOptionsInterface;
+use Consolidation\OutputFormatters\StructuredData\RestructureInterface;
+use Consolidation\OutputFormatters\StructuredData\UnstructuredInterface;
+use Consolidation\OutputFormatters\Transformations\SimplifiedFormatterInterface;
+use Consolidation\OutputFormatters\Transformations\StringTransformationInterface;
+use Consolidation\OutputFormatters\Validate\ValidationInterface;
 use Consolidation\OutputFormatters\Validate\ValidDataTypesTrait;
 use Symfony\Component\Console\Output\OutputInterface;
-use Consolidation\OutputFormatters\StructuredData\RestructureInterface;
 
 /**
  * String formatter
@@ -19,10 +22,16 @@ use Consolidation\OutputFormatters\StructuredData\RestructureInterface;
 class StringFormatter implements FormatterInterface, ValidationInterface, OverrideOptionsInterface
 {
     /**
-     * All data types are acceptable.
+     * By default, we assume that we can convert any data type to `string`,
+     * unless it implements UnstructuredInterface, in which case we won't
+     * allow the `string` format unless the data type also implements
+     * StringTransformationInterface.
      */
     public function isValidDataType(\ReflectionClass $dataType)
     {
+        if ($dataType->implementsInterface('\Consolidation\OutputFormatters\StructuredData\UnstructuredInterface') && !$dataType->implementsInterface('\Consolidation\OutputFormatters\Transformations\StringTransformationInterface')) {
+            return false;
+        }
         return true;
     }
 
@@ -53,7 +62,7 @@ class StringFormatter implements FormatterInterface, ValidationInterface, Overri
 
     /**
      * If the data provided to a 'string' formatter is a table, then try
-     * to emit it as a TSV value.
+     * to emit it in a simplified form (by default, TSV).
      *
      * @param OutputInterface $output
      * @param mixed $data
@@ -61,6 +70,11 @@ class StringFormatter implements FormatterInterface, ValidationInterface, Overri
      */
     protected function reduceToSigleFieldAndWrite(OutputInterface $output, $data, FormatterOptions $options)
     {
+        if ($data instanceof StringTransformationInterface) {
+            $simplified = $data->simplifyToString($options);
+            return $output->write($simplified);
+        }
+
         $alternateFormatter = new TsvFormatter();
         try {
             $data = $alternateFormatter->validate($data);