Skip to content

Commit

Permalink
Fix ServerPluginGenerator by not using instance variables (#218)
Browse files Browse the repository at this point in the history
Fix ServerPluginGenerator by not using instance variables
  • Loading branch information
Korbeil committed Jan 3, 2020
2 parents abb710b + cabe161 commit 1a974c8
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 28 deletions.
17 changes: 11 additions & 6 deletions src/OpenApi/Generator/Client/ServerPluginGenerator.php
Expand Up @@ -17,25 +17,30 @@ protected function getPsr18ClientGeneratorClass(): string
return Psr18ClientGenerator::class;
}

private function discoverServer(OpenApi $openApi)
private function discoverServer(OpenApi $openApi): array
{
$servers = $openApi->getServers();
$server = $servers !== null && !empty($servers[0]) ? $servers[0] : null;

if (null !== $server) {
$url = parse_url($server->getUrl());
$this->baseUri = '';
$baseUri = '';
$plugins = [];

if (\array_key_exists('host', $url)) {
$scheme = $url['scheme'] ?? 'https';
$this->baseUri = $scheme . '://' . trim($url['host'], '/');
$this->plugins[] = AddHostPlugin::class;
$baseUri = $scheme . '://' . trim($url['host'], '/');
$plugins[] = AddHostPlugin::class;
}

if (\array_key_exists('path', $url) && null !== $url['path']) {
$this->baseUri .= '/' . trim($url['path'], '/');
$this->plugins[] = AddPathPlugin::class;
$baseUri .= '/' . trim($url['path'], '/');
$plugins[] = AddPathPlugin::class;
}

return [$baseUri, $plugins];
}

return [null, []];
}
}
14 changes: 9 additions & 5 deletions src/OpenApi2/Generator/Client/ServerPluginGenerator.php
Expand Up @@ -17,7 +17,7 @@ protected function getPsr18ClientGeneratorClass(): string
return Psr18ClientGenerator::class;
}

private function discoverServer(OpenApi $openApi)
private function discoverServer(OpenApi $openApi): array
{
if (null !== ($host = $openApi->getHost())) {
$scheme = 'https';
Expand All @@ -27,13 +27,17 @@ private function discoverServer(OpenApi $openApi)
$scheme = reset($schemes);
}

$this->baseUri = $scheme . '://' . trim($host, '/');
$this->plugins[] = AddHostPlugin::class;
$baseUri = $scheme . '://' . trim($host, '/');
$plugins[] = AddHostPlugin::class;

if (null !== ($basePath = $openApi->getBasePath())) {
$this->baseUri .= '/' . trim($basePath, '/');
$this->plugins[] = AddPathPlugin::class;
$baseUri .= '/' . trim($basePath, '/');
$plugins[] = AddPathPlugin::class;
}

return [$baseUri, $plugins];
}

return [null, []];
}
}
23 changes: 6 additions & 17 deletions src/OpenApiCommon/Generator/Client/ServerPluginGenerator.php
Expand Up @@ -2,7 +2,6 @@

namespace Jane\OpenApiCommon\Generator\Client;

use Http\Client\Common\Plugin;
use Http\Discovery\Psr17FactoryDiscovery;
use Http\Discovery\UriFactoryDiscovery;
use PhpParser\Node\Stmt;
Expand All @@ -12,30 +11,20 @@

trait ServerPluginGenerator
{
/** @var string */
private $baseUri;

/** @var array|Plugin[] */
private $plugins = [];

abstract protected function getPsr18ClientGeneratorClass(): string;

abstract protected function discoverServer($openApi): void;
abstract protected function discoverServer($openApi): array;

protected function needsServerPlugins($openApi): bool
{
if (null === $this->baseUri) {
$this->discoverServer($openApi);
}
[$baseUri, $_] = $this->discoverServer($openApi);

return !(empty($this->baseUri) || $this->baseUri === '/');
return !(empty($baseUri) || $baseUri === '/');
}

protected function getServerPluginsStatements($openApi): array
{
if (null === $this->baseUri) {
$this->discoverServer($openApi);
}
[$baseUri, $plugins] = $this->discoverServer($openApi);

$psr18ClientGeneratorClass = $this->getPsr18ClientGeneratorClass();
$discoveryFactoryClass = $this instanceof $psr18ClientGeneratorClass ? Psr17FactoryDiscovery::class : UriFactoryDiscovery::class;
Expand All @@ -51,13 +40,13 @@ protected function getServerPluginsStatements($openApi): array
),
'createUri',
[
new Node\Arg(new Node\Scalar\String_($this->baseUri)),
new Node\Arg(new Node\Scalar\String_($baseUri)),
]
)
)),
];

foreach ($this->plugins as $pluginClass) {
foreach ($plugins as $pluginClass) {
$stmts[] = new Stmt\Expression(new Expr\Assign(
new Expr\ArrayDimFetch(new Expr\Variable('plugins')),
new Expr\New_(new Name\FullyQualified($pluginClass), [
Expand Down

0 comments on commit 1a974c8

Please sign in to comment.