public function testAppendLineMethodAndArrayAggregate() { $block = new Block(); $block->appendLine('$a = 1;'); $block->appendLine('$b = 2;'); $block->appendLine('return $a + $b;'); foreach ($block as $line) { $this->assertNotEmpty($line); $ret = eval($line); } }
public function execute($user, $repo) { $ns = ''; if ($appNs = $this->options->ns) { $ns = rtrim(str_replace(':', '\\', $appNs), '\\') . '\\'; } elseif ($appNs = $this->getApplication()->getCurrentAppNamespace()) { $ns = $appNs . '\\Topic\\'; } else { $this->logger->notice('Namespace is defined.'); } // Use git to clone the wiki $wikiGitURI = "https://github.com/{$user}/{$repo}.wiki.git"; $wikiBaseUrl = "https://github.com/{$user}/{$repo}/wiki"; $localRepoPath = "tmp/{$repo}.wiki"; $currentDir = getcwd(); if (is_dir($localRepoPath)) { if ($this->options->update) { $this->logger->info("Fetching {$wikiGitURI}..."); system("git -C {$localRepoPath} pull origin", $retval); if ($retval != 0) { return $this->logger->error("Can't clone wiki repository"); } } } else { $dirname = dirname($localRepoPath); if (!file_exists($dirname)) { mkdir($dirname, 0755, true); } $this->logger->info("Cloning {$wikiGitURI}..."); system("git clone {$wikiGitURI} {$localRepoPath}", $retval); if ($retval != 0) { return $this->logger->error("Can't clone wiki repository"); } } // Build classes $this->logger->info('Building topic classes from GitHub pages...'); $outputDir = $this->options->dir ?: '.'; $directory = new RecursiveDirectoryIterator($localRepoPath); $iterator = new RecursiveIteratorIterator($directory); $topics = array(); foreach ($iterator as $file) { if (preg_match('/\\.git/', $file->getPathName())) { continue; } if (preg_match('/\\.md$/', $file->getPathName())) { $topicRemoteUrl = $wikiBaseUrl . '/' . $file->getFileName(); // Used from command-line, to invoke the topic // $topicId = strtolower(preg_replace(array('/.md$/'),array(''),$file->getFileName())); // The readable topic title // TODO: Support non-ascii characters $entryName = preg_replace('/.md$/', '', $file->getFileName()); $entryNameNonEnChars = trim(preg_replace('/[^a-zA-Z0-9-\\s]/', '', $entryName)); $topicClassName = implode('', array_map('ucfirst', explode('-', str_replace(' ', '', $entryNameNonEnChars)))) . 'Topic'; $topicId = strtolower(preg_replace('/\\s+/', '-', $entryNameNonEnChars)); $topicTitle = preg_replace('/-/', ' ', $entryName); $topicFullClassName = $ns . $topicClassName; $topics[$topicId] = $topicFullClassName; $classFile = $outputDir . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $topicFullClassName) . '.php'; $cTemplate = new TemplateClassFile($topicFullClassName, array('template' => 'Class.php.twig')); $cTemplate->addProperty('id', $topicId); $cTemplate->addProperty('url', $topicRemoteUrl); $cTemplate->addProperty('title', $topicTitle); $cTemplate->extendClass('\\CLIFramework\\Topic\\GitHubTopic'); $cTemplate->addMethod('public', 'getRemoteUrl', array(), 'return $this->remoteUrl;'); $cTemplate->addMethod('public', 'getId', array(), 'return $this->id;'); $content = file_get_contents($file); $cTemplate->addMethod('public', 'getContent', array(), 'return ' . var_export($content, true) . ';', array(), false); $classDir = dirname($classFile); if (!file_exists($classDir)) { mkdir($classDir, 0755, true); } $this->logger->info("Creating {$classFile}"); if (false === file_put_contents($classFile, $cTemplate->render())) { throw new Exception("Can't write file {$classFile}."); } } } $this->logger->info(wordwrap("You may now copy the below content to the 'init' method in your application class:")); $this->logger->writeln('-------'); $block = new Block(); $block->appendLine('$this->topics(' . var_export($topics, true) . ');'); $this->logger->write($block->render()); $this->logger->writeln('-------'); chdir($currentDir); $this->logger->info('Done'); }
/** * @param $block */ private static function simpleBlock(Block $block) { $block->appendLine(''); $block->appendLine(''); $block->appendRenderable(new Comment('Remove the following lines when you implement this test.')); $block->appendRenderable(new Statement(new StaticMethodCall('static', 'markTestIncomplete', ['This test has not been implemented yet . ']))); $block->appendLine(''); $block->appendLine(''); }