3 namespace Consolidation\SiteAlias\Cli;
5 use Consolidation\SiteAlias\SiteAliasFileLoader;
6 use Consolidation\SiteAlias\SiteAliasManager;
7 use Consolidation\SiteAlias\Util\YamlDataFileLoader;
8 use Consolidation\SiteAlias\SiteSpecParser;
9 use Consolidation\SiteAlias\SiteAliasName;
11 class SiteAliasCommands extends \Robo\Tasks
13 protected $aliasLoader;
16 * List available site aliases.
22 public function siteList(array $varArgs)
24 $this->aliasLoader = new SiteAliasFileLoader();
25 $ymlLoader = new YamlDataFileLoader();
26 $this->aliasLoader->addLoader('yml', $ymlLoader);
27 $aliasName = $this->getLocationsAndAliasName($varArgs, $this->aliasLoader);
29 $this->manager = new SiteAliasManager($this->aliasLoader);
31 return $this->renderAliases($this->manager->getMultiple($aliasName));
35 * Load available site aliases.
41 public function siteLoad(array $dirs)
43 $this->aliasLoader = new SiteAliasFileLoader();
44 $ymlLoader = new YamlDataFileLoader();
45 $this->aliasLoader->addLoader('yml', $ymlLoader);
47 foreach ($dirs as $dir) {
48 $this->io()->note("Add search location: $dir");
49 $this->aliasLoader->addSearchLocation($dir);
52 $all = $this->aliasLoader->loadAll();
54 return $this->renderAliases($all);
57 protected function getLocationsAndAliasName($varArgs)
60 foreach ($varArgs as $arg) {
61 if (SiteAliasName::isAliasName($arg)) {
62 $this->io()->note("Alias parameter: '$arg'");
65 $this->io()->note("Add search location: $arg");
66 $this->aliasLoader->addSearchLocation($arg);
72 protected function renderAliases($all)
75 throw new \Exception("No aliases found");
79 foreach ($all as $name => $alias) {
80 $result[$name] = $alias->export();
87 * Show contents of a single site alias.
93 public function siteGet(array $varArgs)
95 $this->aliasLoader = new SiteAliasFileLoader();
96 $ymlLoader = new YamlDataFileLoader();
97 $this->aliasLoader->addLoader('yml', $ymlLoader);
98 $aliasName = $this->getLocationsAndAliasName($varArgs, $this->aliasLoader);
100 $manager = new SiteAliasManager($this->aliasLoader);
101 $result = $manager->get($aliasName);
103 throw new \Exception("No alias found");
106 return $result->export();
110 * Access a value from a single alias.
112 * @command site:value
116 public function siteValue(array $varArgs)
118 $this->aliasLoader = new SiteAliasFileLoader();
119 $ymlLoader = new YamlDataFileLoader();
120 $this->aliasLoader->addLoader('yml', $ymlLoader);
121 $key = array_pop($varArgs);
122 $aliasName = $this->getLocationsAndAliasName($varArgs, $this->aliasLoader);
124 $manager = new SiteAliasManager($this->aliasLoader);
125 $result = $manager->get($aliasName);
127 throw new \Exception("No alias found");
130 return $result->get($key);
134 * Parse a site specification.
136 * @command site-spec:parse
140 public function parse($spec, $options = ['root' => ''])
142 $parser = new SiteSpecParser();
143 return $parser->parse($spec, $options['root']);