public function handleList(Args $args, IO $io) { /** @var AssetMapping[][] $mappingsByTarget */ $mappingsByTarget = array(); /** @var InstallTarget[] $targets */ $targets = array(); $nonExistingTargets = array(); // Assemble mappings and validate targets foreach ($this->assetManager->getAssetMappings() as $mapping) { $targetName = $mapping->getTargetName(); if (!isset($mappingsByTarget[$targetName])) { $mappingsByTarget[$targetName] = array(); if ($this->targetManager->hasTarget($targetName)) { $targets[$targetName] = $this->targetManager->getTarget($targetName); } else { $nonExistingTargets[$targetName] = true; } } $mappingsByTarget[$targetName][] = $mapping; } if (!$mappingsByTarget) { $io->writeLine('No assets are mapped. Use "puli asset map <path> <web-path>" to map assets.'); return 0; } if (count($targets) > 0) { $io->writeLine('The following web assets are currently enabled:'); $io->writeLine(''); foreach ($targets as $targetName => $target) { $targetTitle = 'Target <bu>' . $targetName . '</bu>'; if ($targetName === InstallTarget::DEFAULT_TARGET) { $targetTitle .= ' (alias of: <bu>' . $target->getName() . '</bu>)'; } $io->writeLine(" <b>{$targetTitle}</b>"); $io->writeLine(" Location: <c2>{$target->getLocation()}</c2>"); $io->writeLine(" Installer: {$target->getInstallerName()}"); $io->writeLine(" URL Format: <c1>{$target->getUrlFormat()}</c1>"); $io->writeLine(''); $this->printMappingTable($io, $mappingsByTarget[$targetName]); $io->writeLine(''); } $io->writeLine('Use "puli asset install" to install the assets in their targets.'); } if (count($targets) > 0 && count($nonExistingTargets) > 0) { $io->writeLine(''); } if (count($nonExistingTargets) > 0) { $io->writeLine('The following web assets are disabled since their target does not exist.'); $io->writeLine(''); foreach ($nonExistingTargets as $targetName => $_) { $io->writeLine(" <b>Target <bu>{$targetName}</bu></b>"); $io->writeLine(''); $this->printMappingTable($io, $mappingsByTarget[$targetName], false); $io->writeLine(''); } $io->writeLine('Use "puli target add <target> <location>" to add a target.'); } return 0; }
public function testListMappingsOfNonExistingDefaultTarget() { $this->targetManager->expects($this->any())->method('hasTarget')->willReturnMap(array(array('local', false), array('remote', false), array(InstallTarget::DEFAULT_TARGET, false))); $this->targetManager->expects($this->never())->method('getTarget'); $this->assetManager->expects($this->once())->method('getAssetMappings')->willReturn(array(new AssetMapping('/app/public', 'local', '/', Uuid::fromString(self::UUID1)), new AssetMapping('/acme/blog/public', 'remote', '/blog', Uuid::fromString(self::UUID2)), new AssetMapping('/acme/profiler/public', 'local', '/profiler', Uuid::fromString(self::UUID3)), new AssetMapping('/acme/admin/public', InstallTarget::DEFAULT_TARGET, '/admin', Uuid::fromString(self::UUID4)))); $args = self::$listCommand->parseArgs(new StringArgs('')); $expected = <<<EOF The following web assets are disabled since their target does not exist. Target local e81b32 /app/public / 49cfdf /acme/profiler/public /profiler Target remote 33dbec /acme/blog/public /blog Target default 8c64be /acme/admin/public /admin Use "puli target add <target> <location>" to add a target. EOF; $this->assertSame(0, $this->handler->handleList($args, $this->io)); $this->assertSame($expected, $this->io->fetchOutput()); $this->assertEmpty($this->io->fetchErrors()); }
public function testGetDefaultTarget() { $target = new InstallTarget('local', 'symlink', 'public_html'); $this->targetManager->expects($this->once())->method('getDefaultTarget')->willReturn($target); $args = self::$getDefaultCommand->parseArgs(new StringArgs('')); $this->assertSame(0, $this->handler->handleGetDefault($args, $this->io)); $this->assertSame("local\n", $this->io->fetchOutput()); $this->assertEmpty($this->io->fetchErrors()); }
public function addCreateUrlGeneratorMethod(Clazz $class) { $class->addImport(new Import('Puli\\Discovery\\Api\\ResourceDiscovery')); $class->addImport(new Import('Puli\\AssetPlugin\\Api\\Factory\\UrlGeneratorFactory')); $class->addImport(new Import('Puli\\AssetPlugin\\Api\\Target\\InstallTargetCollection')); $class->addImport(new Import('Puli\\AssetPlugin\\Api\\UrlGenerator\\AssetUrlGenerator')); $class->addImport(new Import('Puli\\AssetPlugin\\UrlGenerator\\DiscoveryUrlGenerator')); $class->addImplementedInterface('UrlGeneratorFactory'); $method = new Method('createUrlGenerator'); $method->setDescription('Creates the URL generator.'); $arg = new Argument('discovery'); $arg->setTypeHint('ResourceDiscovery'); $arg->setType('ResourceDiscovery'); $arg->setDescription('The resource discovery to read from.'); $method->addArgument($arg); $method->setReturnValue(new ReturnValue('$generator', 'AssetUrlGenerator', 'The created URL generator.')); $targets = $this->targetManager->getTargets(); $targetsString = ''; foreach ($targets as $target) { $parameters = ''; foreach ($target->getParameterValues() as $name => $value) { $parameters .= sprintf("\n %s => %s,", var_export($name, true), var_export($value, true)); } if ($parameters) { $parameters .= "\n "; } $targetsString .= sprintf("\n new InstallTarget(%s, %s, %s, %s, array(%s)),", var_export($target->getName(), true), var_export($target->getInstallerName(), true), var_export($target->getLocation(), true), var_export($target->getUrlFormat(), true), $parameters); } if ($targetsString) { $class->addImport(new Import('Puli\\AssetPlugin\\Api\\Target\\InstallTarget')); $targetsString = "array({$targetsString}\n)"; } $method->addBody("\$targets = new InstallTargetCollection({$targetsString});"); if ($targetsString) { $method->addBody("\$targets->setDefaultTarget('{$targets->getDefaultTarget()->getName()}');"); } $method->addBody("\$generator = new DiscoveryUrlGenerator(\$discovery, \$targets);"); $class->addMethod($method); }
public function testAddCreateUrlGeneratorMethodWithoutTargets() { $targets = new InstallTargetCollection(array()); $this->targetManager->expects($this->any())->method('getTargets')->willReturn($targets); $class = new Clazz('Puli\\MyFactory'); $class->addImport(new Import('Puli\\Factory\\PuliFactory')); $class->addImplementedInterface('PuliFactory'); $class->setFilePath($this->tempFile); $this->generator->addCreateUrlGeneratorMethod($class); $writer = new ClassWriter(); $writer->writeClass($class); $expected = <<<EOF <?php namespace Puli; use Puli\\AssetPlugin\\Api\\Factory\\UrlGeneratorFactory; use Puli\\AssetPlugin\\Api\\Target\\InstallTargetCollection; use Puli\\AssetPlugin\\Api\\UrlGenerator\\AssetUrlGenerator; use Puli\\AssetPlugin\\UrlGenerator\\DiscoveryUrlGenerator; use Puli\\Discovery\\Api\\ResourceDiscovery; use Puli\\Factory\\PuliFactory; class MyFactory implements PuliFactory, UrlGeneratorFactory { /** * Creates the URL generator. * * @param ResourceDiscovery \$discovery The resource discovery to read from. * * @return AssetUrlGenerator The created URL generator. */ public function createUrlGenerator(ResourceDiscovery \$discovery) { \$targets = new InstallTargetCollection(); \$generator = new DiscoveryUrlGenerator(\$discovery, \$targets); return \$generator; } } EOF; $this->assertSame($expected, file_get_contents($this->tempFile)); }
public function handleGetDefault(Args $args, IO $io) { $io->writeLine($this->targetManager->getDefaultTarget()->getName()); return 0; }