/** * @param ResourceInterface $resource * @param array $data */ public function generate(ResourceInterface $resource, array $data) { $method = $data['method']; $expected = $data['expected']; $code = $this->filesystem->getFileContents($resource->getSrcFilename()); $values = array('%constant%' => var_export($expected, true)); if (!($content = $this->templates->render('method', $values))) { $content = $this->templates->renderString($this->getTemplate(), $values); } $pattern = '/' . '(function\\s+' . preg_quote($method, '/') . '\\s*\\([^\\)]*\\))\\s+{[^}]*?}/'; $replacement = '$1' . $content; $modifiedCode = preg_replace($pattern, $replacement, $code); $this->filesystem->putFileContents($resource->getSrcFilename(), $modifiedCode); $this->io->writeln(sprintf("\n<info>Method <value>%s::%s()</value> has been modified.</info>", $resource->getSrcClassname(), $method), 2); }
function it_generates_class_method_from_resource($io, $tpl, $fs, ResourceInterface $resource) { $codeWithoutMethod = <<<CODE <?php namespace Acme; class App { } CODE; $codeWithMethod = <<<CODE <?php namespace Acme; class App { METHOD } CODE; $values = array('%name%' => 'setName', '%arguments%' => '$argument1'); $resource->getSrcFilename()->willReturn('/project/src/Acme/App.php'); $resource->getSrcClassname()->willReturn('Acme\\App'); $tpl->render('method', $values)->willReturn(null); $tpl->renderString(Argument::type('string'), $values)->willReturn('METHOD'); $fs->getFileContents('/project/src/Acme/App.php')->willReturn($codeWithoutMethod); $fs->putFileContents('/project/src/Acme/App.php', $codeWithMethod)->shouldBeCalled(); $this->generate($resource, array('name' => 'setName', 'arguments' => array('everzet'))); }
function it_should_not_dispatch_an_event_if_the_file_already_existed($dispatcher, $filesystem, ResourceInterface $resource) { $path = '/foo'; $resource->getSrcFilename()->willReturn($path); $filesystem->pathExists($path)->willReturn(true); $this->generate($resource, array()); $dispatcher->dispatch('afterFileCreation', Argument::any())->shouldNotHaveBeenCalled(); }
/** * @param ResourceInterface $resource * @param array $data */ public function generate(ResourceInterface $resource, array $data = array()) { $filepath = $resource->getSrcFilename(); $methodName = $data['name']; $arguments = $data['arguments']; $content = $this->getContent($resource, $methodName, $arguments); $code = $this->appendMethodToCode($this->filesystem->getFileContents($filepath), $content); $this->filesystem->putFileContents($filepath, $code); $this->io->writeln(sprintf("<info>Method <value>%s::%s()</value> has been created.</info>\n", $resource->getSrcClassname(), $methodName), 2); }
/** * @param ResourceInterface $resource * @param array $data */ public function generate(ResourceInterface $resource, array $data = array()) { $filepath = $resource->getSrcFilename(); $methodName = $data['name']; $arguments = $data['arguments']; $content = $this->getContent($resource, $methodName, $arguments); $code = $this->filesystem->getFileContents($filepath); $code = preg_replace('/}[ \\n]*$/', rtrim($content) . "\n}\n", trim($code)); $this->filesystem->putFileContents($filepath, $code); $this->io->writeln(sprintf("\n<info>Method <value>%s::%s()</value> has been created.</info>", $resource->getSrcClassname(), $methodName), 2); }
function it_asks_confirmation_if_class_already_exists($io, $tpl, $fs, ResourceInterface $resource) { $resource->getName()->willReturn('App'); $resource->getSrcFilename()->willReturn('/project/src/Acme/App.php'); $resource->getSrcNamespace()->willReturn('Acme'); $resource->getSrcClassname()->willReturn('Acme\\App'); $fs->pathExists('/project/src/Acme/App.php')->willReturn(true); $io->askConfirmation(Argument::type('string'), false)->willReturn(false); $fs->putFileContents(Argument::cetera())->shouldNotBeCalled(); $this->generate($resource); }
/** * @param ResourceInterface $resource * @param array $data */ public function generate(ResourceInterface $resource, array $data) { $filepath = $resource->getSrcFilename(); if (!($content = $this->templates->render('private-constructor', array()))) { $content = $this->templates->renderString($this->getTemplate(), array()); } $code = $this->filesystem->getFileContents($filepath); $code = preg_replace('/}[ \\n]*$/', rtrim($content) . "\n}\n", trim($code)); $this->filesystem->putFileContents($filepath, $code); $this->io->writeln("<info>Private constructor has been created.</info>\n", 2); }
/** * @param ResourceInterface $resource * @param array $data */ public function generate(ResourceInterface $resource, array $data) { $filepath = $resource->getSrcFilename(); if (!($content = $this->templates->render('private-constructor', array()))) { $content = $this->templates->renderString($this->getTemplate(), array()); } $code = $this->filesystem->getFileContents($filepath); $code = $this->codeWriter->insertMethodFirstInClass($code, $content); $this->filesystem->putFileContents($filepath, $code); $this->io->writeln("<info>Private constructor has been created.</info>\n", 2); }
protected function generateCodeForResource(ResourceInterface $resource, array $data) { $structure = Object::make($resource->getSrcClassname()); $structure->makeFinal(); $handle = Method::make('handle'); $handle->addArgument(Argument::make($data['handles'], 'command')); $handle->setBody(" // TODO write your own implementation"); $structure->addMethod($handle); $file = File::make($resource->getSrcFilename())->setStructure($structure); $prettyPrinter = Build::prettyPrinter(); return $prettyPrinter->generateCode($file); }
/** * @param ResourceInterface $resource * @param array $data */ public function generate(ResourceInterface $resource, array $data = array()) { $filepath = $resource->getSrcFilename(); $name = $data['name']; $arguments = $data['arguments']; $argString = $this->buildArgumentString($arguments); $values = array('%name%' => $name, '%arguments%' => $argString); if (!($content = $this->templates->render('interface-method-signature', $values))) { $content = $this->templates->renderString($this->getTemplate(), $values); } $this->insertMethodSignature($filepath, $content); $this->io->writeln(sprintf("<info>Method signature <value>%s::%s()</value> has been created.</info>\n", $resource->getSrcClassname(), $name), 2); }
/** * @param ResourceInterface $resource * @param array $data */ public function generate(ResourceInterface $resource, array $data = array()) { $filepath = $resource->getSrcFilename(); $name = $data['name']; $arguments = $data['arguments']; $argString = count($arguments) ? '$argument' . implode(', $argument', range(1, count($arguments))) : ''; $values = array('%name%' => $name, '%arguments%' => $argString); if (!($content = $this->templates->render('method', $values))) { $content = $this->templates->renderString($this->getTemplate(), $values); } $code = $this->filesystem->getFileContents($filepath); $this->filesystem->putFileContents($filepath, $this->getUpdatedCode($name, $content, $code)); $this->io->writeln(sprintf("<info>Method <value>%s::%s()</value> has been created.</info>\n", $resource->getSrcClassname(), $name), 2); }
/** * @param ResourceInterface $resource * @param array $data * * @return mixed */ public function generate(ResourceInterface $resource, array $data = array()) { $filepath = $resource->getSrcFilename(); $name = $data['name']; $arguments = $data['arguments']; $argString = $this->argumentBuilder->buildFrom($arguments); $values = array('%name%' => $name, '%arguments%' => $argString); if (!($content = $this->templates->render('method', $values))) { $content = $this->templates->renderString($this->getTemplate(), $values); } $code = $this->filesystem->getFileContents($filepath); $code = preg_replace('/}[ \\n]*$/', rtrim($content) . "\n}\n", trim($code)); $this->filesystem->putFileContents($filepath, $code); $this->io->writeln(sprintf("\n<info>Method <value>%s::%s()</value> has been created.</info>", $resource->getSrcClassname(), $name), 2); }
public function it_stages_files_created_as_a_result_of_delegation_of_generation($delegate, ResourceInterface $resource, $filesystem, $repository) { $srcFilePath = '/foo/bar.php'; $specFilePath = '/foo/barspec.php'; $resource->getSrcFilename()->willReturn($srcFilePath); $resource->getSpecFilename()->willReturn($specFilePath); $filesystem->pathExists($srcFilePath)->willReturn(false); $filesystem->pathExists($specFilePath)->willReturn(true); $delegate->generate(Argument::cetera())->will(function () use($filesystem, $srcFilePath) { $filesystem->pathExists($srcFilePath)->willReturn(true); }); $this->generate($resource, []); $repository->stageFile($srcFilePath)->shouldHaveBeenCalled(); $repository->stageFile($specFilePath)->shouldNotHaveBeenCalled(); }
public function generate(ResourceInterface $resource, array $data = array()) { $filepath = $resource->getSrcFilename(); if ($this->filesystem->pathExists($filepath)) { $message = sprintf('File "%s" already exists. Overwrite?', basename($filepath)); if (!$this->io->askConfirmation($message, false)) { return; } $this->io->writeln(); } $path = dirname($filepath); if (!$this->filesystem->isDirectory($path)) { $this->filesystem->makeDirectory($path); } $values = array('%filepath%' => $filepath, '%name%' => $resource->getName(), '%namespace%' => $resource->getSrcNamespace(), '%namespace_block%' => '' !== $resource->getSrcNamespace() ? sprintf("\n\nnamespace %s;", $resource->getSrcNamespace()) : ''); if (!($content = $this->templates->render('wp_class', $values))) { $content = $this->templates->renderString(file_get_contents(__DIR__ . '/templates/generic_class.template'), $values); } $this->filesystem->putFileContents($filepath, $content); $this->io->writeln(sprintf("<info>WP class <value>%s</value> created in <value>'%s'</value>.</info>\n", $resource->getSrcClassname(), $filepath)); }
protected function generateCodeForResource(ResourceInterface $resource, array $data) { $structure = Object::make($resource->getSrcClassname()); $structure->makeFinal(); $construct = Method::make('__construct'); $structure->addMethod($construct); $constructBody = []; foreach ($data['params'] as $param) { $structure->addProperty(Property::make($param)); $body = <<<METHOD return \$this->{$param}; METHOD; $construct->addArgument(Argument::make('mixed', $param)); $constructBody[] = " \$this->{$param} = \${$param};"; $method = Method::make($param)->setBody($body); $structure->addMethod($method); } $construct->setBody(implode("\n", $constructBody)); $file = File::make($resource->getSrcFilename())->setStructure($structure); $prettyPrinter = Build::prettyPrinter(); return $prettyPrinter->generateCode($file); }
/** * @param ResourceInterface $oldResource * @param ResourceInterface $newResource */ private function relocateSrc(ResourceInterface $oldResource, ResourceInterface $newResource) { $this->relocateResource($oldResource->getSrcFilename(), $newResource->getSrcFilename(), $this->modifySrcContent($oldResource, $newResource)); }
/** * @param ResourceInterface $resource * * @return string */ protected function getFilePath(ResourceInterface $resource) { return $resource->getSrcFilename(); }
/** * @param ResourceInterface $resource * @return string[] */ private function getFilePathsFromResource(ResourceInterface $resource) { return [$resource->getSrcFilename(), $resource->getSpecFilename()]; }
function it_records_that_class_was_created_in_executioncontext(ResourceInterface $resource, ExecutionContextInterface $executionContext) { $resource->getName()->willReturn('App'); $resource->getSrcFilename()->willReturn('/project/src/Acme/App.php'); $resource->getSrcNamespace()->willReturn('Acme'); $resource->getSrcClassname()->willReturn('Acme\\App'); $this->generate($resource); $executionContext->addGeneratedType('Acme\\App')->shouldHaveBeenCalled(); }