function it_generates_static_constructor_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('%methodName%' => 'setName', '%arguments%' => '$argument1', '%returnVar%' => '$app', '%className%' => 'App', '%constructorArguments%' => '');
        $resource->getSrcFilename()->willReturn('/project/src/Acme/App.php');
        $resource->getSrcClassname()->willReturn('Acme\\App');
        $resource->getName()->willReturn('App');
        $tpl->render('named_constructor_create_object', $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('jmurphy')));
    }
 function let(ResourceInterface $resource)
 {
     $resource->getSrcNamespace()->willReturn('Foo');
     $resource->getSpecNamespace()->willReturn('spec/Foo');
     $resource->getName()->willReturn('Bar');
     $this->beConstructedWith($resource, self::CONTENT);
 }
Ejemplo n.º 3
0
 /**
  * @param ResourceInterface $resource
  * @param string            $filepath
  *
  * @return string
  */
 protected function renderTemplate(ResourceInterface $resource, $filepath)
 {
     $values = array('%filepath%' => $filepath, '%name%' => $resource->getName(), '%namespace%' => $resource->getSrcNamespace(), '%namespace_block%' => '' !== $resource->getSrcNamespace() ? sprintf("\n\nnamespace %s;", $resource->getSrcNamespace()) : '');
     if (!($content = $this->getTemplateRenderer()->render('class', $values))) {
         $content = $this->getTemplateRenderer()->renderString($this->getTemplate(), $values);
     }
     return $content;
 }
Ejemplo n.º 4
0
 /**
  * @param ResourceInterface $resource
  * @param string            $filepath
  *
  * @return string
  */
 protected function renderTemplate(ResourceInterface $resource, $filepath)
 {
     $values = array('%filepath%' => $filepath, '%name%' => $resource->getSpecName(), '%namespace%' => $resource->getSpecNamespace(), '%subject%' => $resource->getSrcClassname(), '%subject_class%' => $resource->getName());
     if (!($content = $this->getTemplateRenderer()->render('specification', $values))) {
         $content = $this->getTemplateRenderer()->renderString($this->getTemplate(), $values);
     }
     return $content;
 }
 /**
  * @param ResourceInterface $resource
  * @param string            $methodName
  * @param array             $arguments
  * @return string
  */
 private function getContent(ResourceInterface $resource, $methodName, $arguments)
 {
     $className = $resource->getName();
     $class = $resource->getSrcClassname();
     $template = new CreateObjectTemplate($this->templates, $methodName, $arguments, $className);
     if (method_exists($class, '__construct')) {
         $template = new ExistingConstructorTemplate($this->templates, $methodName, $arguments, $className, $class);
     }
     return $template->getContent();
 }
Ejemplo n.º 6
0
 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);
 }
 function it_creates_folder_for_spec_if_needed($io, $tpl, $fs, ResourceInterface $resource)
 {
     $resource->getSpecName()->willReturn('AppAppSpec');
     $resource->getSpecFilename()->willReturn('/project/spec/Acme/AppSpec.php');
     $resource->getSpecNamespace()->willReturn('spec\\Acme');
     $resource->getSrcClassname()->willReturn('Acme\\App');
     $resource->getName()->willReturn('App');
     $fs->pathExists('/project/spec/Acme/AppSpec.php')->willReturn(false);
     $fs->isDirectory('/project/spec/Acme')->willReturn(false);
     $fs->makeDirectory('/project/spec/Acme')->shouldBeCalled();
     $fs->putFileContents('/project/spec/Acme/AppSpec.php', Argument::any())->willReturn(null);
     $this->generate($resource);
 }
 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));
 }
 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();
 }
 /**
  * @param ResourceInterface $resource
  * @param string            $generation
  * @param array             $data
  *
  * @return boolean
  */
 public function supports(ResourceInterface $resource, $generation, array $data)
 {
     $needle = 'CommandHandler';
     $isHandler = substr($resource->getName(), -strlen($needle)) === $needle;
     return 'specification' === $generation && $isHandler;
 }
Ejemplo n.º 11
0
 /**
  * @param ResourceInterface $oldResource
  * @param ResourceInterface $newResource
  *
  * @return string
  */
 private function modifySpecContent(ResourceInterface $oldResource, ResourceInterface $newResource)
 {
     return $this->modifyResourceContent($oldResource, file_get_contents($oldResource->getSpecFilename()), $newResource->getSpecNamespace(), $newResource->getName());
 }
 /**
  * @param $className
  */
 public function setClassName($className)
 {
     $this->content = preg_replace(sprintf('/class %s/', $this->resource->getName()), sprintf('class %s', $className), $this->content);
 }
 /**
  * @param ResourceInterface $resource
  * @param string            $generation
  * @param array             $data
  *
  * @return boolean
  */
 public function supports(ResourceInterface $resource, $generation, array $data)
 {
     $needle = 'Projector';
     $isHandler = substr($resource->getName(), -strlen($needle)) === $needle;
     return 'class' === $generation && $isHandler;
 }