2 namespace Consolidation\OutputFormatters\Formatters;
4 use Consolidation\OutputFormatters\Options\FormatterOptions;
5 use Symfony\Component\Console\Output\OutputInterface;
6 use Consolidation\OutputFormatters\StructuredData\MetadataInterface;
8 trait MetadataFormatterTrait
13 public function writeMetadata(OutputInterface $output, $structuredOutput, FormatterOptions $options)
15 $template = $options->get(FormatterOptions::METADATA_TEMPLATE);
19 if (!$structuredOutput instanceof MetadataInterface) {
22 $metadata = $structuredOutput->getMetadata();
23 if (empty($metadata)) {
26 $message = $this->interpolate($template, $metadata);
27 return $output->writeln($message);
31 * Interpolates context values into the message placeholders.
33 * @author PHP Framework Interoperability Group
35 * @param string $message
36 * @param array $context
40 private function interpolate($message, array $context)
42 // build a replacement array with braces around the context keys
44 foreach ($context as $key => $val) {
45 if (!is_array($val) && (!is_object($val) || method_exists($val, '__toString'))) {
46 $replace[sprintf('{%s}', $key)] = $val;
50 // interpolate replacement values into the message and return
51 return strtr($message, $replace);