Mercurial > hg > isophonics-drupal-site
diff vendor/psy/psysh/src/Psy/Command/DumpCommand.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/psy/psysh/src/Psy/Command/DumpCommand.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,105 @@ +<?php + +/* + * This file is part of Psy Shell. + * + * (c) 2012-2017 Justin Hileman + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Psy\Command; + +use Psy\Exception\RuntimeException; +use Psy\VarDumper\Presenter; +use Psy\VarDumper\PresenterAware; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +/** + * Dump an object or primitive. + * + * This is like var_dump but *way* awesomer. + */ +class DumpCommand extends ReflectingCommand implements PresenterAware +{ + private $presenter; + + /** + * PresenterAware interface. + * + * @param Presenter $presenter + */ + public function setPresenter(Presenter $presenter) + { + $this->presenter = $presenter; + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->setName('dump') + ->setDefinition(array( + new InputArgument('target', InputArgument::REQUIRED, 'A target object or primitive to dump.', null), + new InputOption('depth', '', InputOption::VALUE_REQUIRED, 'Depth to parse', 10), + new InputOption('all', 'a', InputOption::VALUE_NONE, 'Include private and protected methods and properties.'), + )) + ->setDescription('Dump an object or primitive.') + ->setHelp( + <<<'HELP' +Dump an object or primitive. + +This is like var_dump but <strong>way</strong> awesomer. + +e.g. +<return>>>> dump $_</return> +<return>>>> dump $someVar</return> +HELP + ); + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + $depth = $input->getOption('depth'); + $target = $this->resolveTarget($input->getArgument('target')); + $output->page($this->presenter->present($target, $depth, $input->getOption('all') ? Presenter::VERBOSE : 0)); + + if (is_object($target)) { + $this->setCommandScopeVariables(new \ReflectionObject($target)); + } + } + + /** + * Resolve dump target name. + * + * @throws RuntimeException if target name does not exist in the current scope + * + * @param string $target + * + * @return mixed + */ + protected function resolveTarget($target) + { + $matches = array(); + if (preg_match(self::SUPERGLOBAL, $target, $matches)) { + if (!array_key_exists($matches[1], $GLOBALS)) { + throw new RuntimeException('Unknown target: ' . $target); + } + + return $GLOBALS[$matches[1]]; + } elseif (preg_match(self::INSTANCE, $target, $matches)) { + return $this->getScopeVariable($matches[1]); + } else { + throw new RuntimeException('Unknown target: ' . $target); + } + } +}