2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Console\Helper ;
use Symfony\Component\Console\Descriptor\DescriptorInterface ;
use Symfony\Component\Console\Descriptor\JsonDescriptor ;
use Symfony\Component\Console\Descriptor\MarkdownDescriptor ;
use Symfony\Component\Console\Descriptor\TextDescriptor ;
use Symfony\Component\Console\Descriptor\XmlDescriptor ;
use Symfony\Component\Console\Output\OutputInterface ;
2016-04-20 09:56:34 -07:00
use Symfony\Component\Console\Exception\InvalidArgumentException ;
2015-08-17 17:00:26 -07:00
/**
* This class adds helper method to describe objects in various formats .
*
* @ author Jean - François Simon < contact @ jfsimon . fr >
*/
class DescriptorHelper extends Helper
{
/**
* @ var DescriptorInterface []
*/
private $descriptors = array ();
/**
* Constructor .
*/
public function __construct ()
{
$this
-> register ( 'txt' , new TextDescriptor ())
-> register ( 'xml' , new XmlDescriptor ())
-> register ( 'json' , new JsonDescriptor ())
-> register ( 'md' , new MarkdownDescriptor ())
;
}
/**
* Describes an object if supported .
*
* Available options are :
* * format : string , the output format name
* * raw_text : boolean , sets output type as raw
*
* @ param OutputInterface $output
* @ param object $object
* @ param array $options
*
2016-04-20 09:56:34 -07:00
* @ throws InvalidArgumentException when the given format is not supported
2015-08-17 17:00:26 -07:00
*/
public function describe ( OutputInterface $output , $object , array $options = array ())
{
$options = array_merge ( array (
'raw_text' => false ,
'format' => 'txt' ,
), $options );
if ( ! isset ( $this -> descriptors [ $options [ 'format' ]])) {
2016-04-20 09:56:34 -07:00
throw new InvalidArgumentException ( sprintf ( 'Unsupported format "%s".' , $options [ 'format' ]));
2015-08-17 17:00:26 -07:00
}
$descriptor = $this -> descriptors [ $options [ 'format' ]];
$descriptor -> describe ( $output , $object , $options );
}
/**
* Registers a descriptor .
*
* @ param string $format
* @ param DescriptorInterface $descriptor
*
2017-02-02 16:28:38 -08:00
* @ return $this
2015-08-17 17:00:26 -07:00
*/
public function register ( $format , DescriptorInterface $descriptor )
{
$this -> descriptors [ $format ] = $descriptor ;
return $this ;
}
/**
* { @ inheritdoc }
*/
public function getName ()
{
return 'descriptor' ;
}
}