Skip to content

Commit

Permalink
Correctly set namespace padding for Sync and Async namespaces
Browse files Browse the repository at this point in the history
  • Loading branch information
WyriHaximus committed Jun 15, 2016
1 parent 061ebfa commit fe481e5
Showing 1 changed file with 53 additions and 17 deletions.
70 changes: 53 additions & 17 deletions src/ResourceGenerator.php
Expand Up @@ -112,18 +112,28 @@ public function run()
{
$yaml = $this->readYaml($this->climate->arguments->get('definition'));

$class = explode('\\', $yaml['class']);
$namespacePadding = explode('\\', $yaml['class']);
$namespace = explode('\\', $yaml['namespace']);

$yaml['class'] = array_pop($class);
$yaml['namespace'] = implode('\\', array_merge($namespace, $class));

$classNamespacePadding = implode(DIRECTORY_SEPARATOR, $class);
$yaml['class'] = array_pop($namespacePadding);
$yaml['namespace'] = implode('\\', array_merge($namespace, $namespacePadding));

$namespacePathPadding = implode(DIRECTORY_SEPARATOR, $namespacePadding);
$baseClass = implode(
'\\',
array_merge(
$namespace,
$namespacePadding,
[
$yaml['class']
]
)
);

$this->save(
$this->climate->arguments->get('path') .
DIRECTORY_SEPARATOR .
$classNamespacePadding .
$namespacePathPadding .
DIRECTORY_SEPARATOR,
$yaml['class'] .
'.php',
Expand All @@ -132,7 +142,7 @@ public function run()
$this->save(
$this->climate->arguments->get('path') .
DIRECTORY_SEPARATOR .
$classNamespacePadding .
$namespacePathPadding .
DIRECTORY_SEPARATOR,
$yaml['class'] .
'Interface.php',
Expand All @@ -143,22 +153,48 @@ public function run()
DIRECTORY_SEPARATOR .
'Async' .
DIRECTORY_SEPARATOR .
$classNamespacePadding .
$namespacePathPadding .
DIRECTORY_SEPARATOR,
$yaml['class'] .
'.php',
$this->createExtendingClass('Async', $yaml)
$this->createExtendingClass(
implode(
'\\',
array_merge(
$namespace,
[
'Async',
],
$namespacePadding
)
),
$yaml['class'],
$baseClass
)
);
$this->save(
$this->climate->arguments->get('path') .
DIRECTORY_SEPARATOR .
'Sync' .
DIRECTORY_SEPARATOR .
$classNamespacePadding .
$namespacePathPadding .
DIRECTORY_SEPARATOR,
$yaml['class'] .
'.php',
$this->createExtendingClass('Sync', $yaml)
$this->createExtendingClass(
implode(
'\\',
array_merge(
$namespace,
[
'Sync',
],
$namespacePadding
)
),
$yaml['class'],
$baseClass
)
);
}

Expand Down Expand Up @@ -261,16 +297,16 @@ protected function createMethod(BuilderFactory $factory, string $type, string $n
);
}

protected function createExtendingClass(string $type, array $yaml)
protected function createExtendingClass(string $namespace, string $className, string $baseClass)
{
$factory = new BuilderFactory;

$class = $factory->class($yaml['class'])
->extend('Base' . $yaml['class']);
$class = $factory->class($className)
->extend('Base' . $className);

$class->addStmt($factory->method('refresh')
->makePublic()
->setReturnType($yaml['class'])
->setReturnType($className)
->addStmt(
new Node\Stmt\Return_(
new Node\Expr\MethodCall(
Expand All @@ -289,8 +325,8 @@ protected function createExtendingClass(string $type, array $yaml)
)
));

$node = $factory->namespace($yaml['namespace'] . '\\' . $type)
->addStmt($factory->use($yaml['namespace'] . '\\' . $yaml['class'])->as('Base' . $yaml['class']))
$node = $factory->namespace($namespace)
->addStmt($factory->use($baseClass)->as('Base' . $className))
->addStmt($class)

->getNode()
Expand Down

0 comments on commit fe481e5

Please sign in to comment.