From 4804025c6dee48df4492e3b0ed93567196cac7bc Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 14 Jun 2022 02:30:08 +0000 Subject: [PATCH 1/4] refactor specific filters --- src/SDK/Language.php | 7 +++++ src/SDK/Language/Dart.php | 14 +++++++++ src/SDK/Language/DotNet.php | 14 +++++++++ src/SDK/Language/Go.php | 14 +++++++++ src/SDK/Language/Ruby.php | 14 +++++++++ src/SDK/Language/Swift.php | 14 +++++++++ src/SDK/Language/Web.php | 22 +++++++++++++ src/SDK/SDK.php | 62 +++---------------------------------- 8 files changed, 104 insertions(+), 57 deletions(-) diff --git a/src/SDK/Language.php b/src/SDK/Language.php index 9d902357f..f7b18bcf6 100644 --- a/src/SDK/Language.php +++ b/src/SDK/Language.php @@ -74,4 +74,11 @@ public function getParams() { return $this->params; } + + /** + * @return array + */ + public function getTwigFilters(){ + return []; + } } \ No newline at end of file diff --git a/src/SDK/Language/Dart.php b/src/SDK/Language/Dart.php index 5f78f3a7c..923414723 100644 --- a/src/SDK/Language/Dart.php +++ b/src/SDK/Language/Dart.php @@ -3,6 +3,7 @@ namespace Appwrite\SDK\Language; use Appwrite\SDK\Language; +use Twig\TwigFilter; class Dart extends Language { @@ -434,4 +435,17 @@ public function getFiles() ], ]; } + + public function getTwigFilters() + { + return [ + new TwigFilter('dartComment', function ($value) { + $value = explode("\n", $value); + foreach ($value as $key => $line) { + $value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// "); + } + return implode("\n", $value); + }, ['is_safe' => ['html']]), + ]; + } } diff --git a/src/SDK/Language/DotNet.php b/src/SDK/Language/DotNet.php index 609e02563..b41861a92 100644 --- a/src/SDK/Language/DotNet.php +++ b/src/SDK/Language/DotNet.php @@ -3,6 +3,7 @@ namespace Appwrite\SDK\Language; use Appwrite\SDK\Language; +use Twig\TwigFilter; class DotNet extends Language { @@ -376,5 +377,18 @@ public function getFiles() ] ]; } + + public function getTwigFilters() + { + return [ + new TwigFilter('dotnetComment', function ($value) { + $value = explode("\n", $value); + foreach ($value as $key => $line) { + $value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// "); + } + return implode("\n", $value); + }, ['is_safe' => ['html']]) + ]; + } } diff --git a/src/SDK/Language/Go.php b/src/SDK/Language/Go.php index 97c023c22..dbf4a4eee 100644 --- a/src/SDK/Language/Go.php +++ b/src/SDK/Language/Go.php @@ -3,6 +3,7 @@ namespace Appwrite\SDK\Language; use Appwrite\SDK\Language; +use Twig\TwigFilter; class Go extends Language { @@ -246,4 +247,17 @@ public function getParamExample(array $param) return $output; } + + public function getTwigFilters() + { + return [ + new TwigFilter('godocComment', function ($value) { + $value = explode("\n", $value); + foreach ($value as $key => $line) { + $value[$key] = "// " . wordwrap($value[$key], 75, "\n// "); + } + return implode("\n", $value); + }, ['is_safe' => ['html']]) + ]; + } } diff --git a/src/SDK/Language/Ruby.php b/src/SDK/Language/Ruby.php index c8b5eea41..949e7b596 100644 --- a/src/SDK/Language/Ruby.php +++ b/src/SDK/Language/Ruby.php @@ -3,6 +3,7 @@ namespace Appwrite\SDK\Language; use Appwrite\SDK\Language; +use Twig\TwigFilter; class Ruby extends Language { @@ -327,4 +328,17 @@ protected function jsonToHash(array $data):string return $output; } + + public function getTwigFilters() + { + return [ + new TwigFilter('rubyComment', function ($value) { + $value = explode("\n", $value); + foreach ($value as $key => $line) { + $value[$key] = " # " . wordwrap($line, 75, "\n # "); + } + return implode("\n", $value); + }, ['is_safe' => ['html']]) + ]; + } } diff --git a/src/SDK/Language/Swift.php b/src/SDK/Language/Swift.php index 089bccae2..1a8fea8a3 100644 --- a/src/SDK/Language/Swift.php +++ b/src/SDK/Language/Swift.php @@ -3,6 +3,7 @@ namespace Appwrite\SDK\Language; use Appwrite\SDK\Language; +use Twig\TwigFilter; class Swift extends Language { @@ -432,4 +433,17 @@ public function getParamExample(array $param) return $output; } + + public function getTwigFilters() + { + return [ + new TwigFilter('swiftComment', function ($value) { + $value = explode("\n", $value); + foreach ($value as $key => $line) { + $value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// "); + } + return implode("\n", $value); + }, ['is_safe' => ['html']]) + ]; + } } diff --git a/src/SDK/Language/Web.php b/src/SDK/Language/Web.php index 32f75d592..f22ae73b2 100644 --- a/src/SDK/Language/Web.php +++ b/src/SDK/Language/Web.php @@ -2,6 +2,8 @@ namespace Appwrite\SDK\Language; +use Twig\TwigFilter; + class Web extends JS { /** @@ -141,4 +143,24 @@ public function getParamExample(array $param) return $output; } + + public function getTwigFilters() + { + return [ + new TwigFilter('comment2', function ($value) { + $value = explode("\n", $value); + foreach ($value as $key => $line) { + $value[$key] = " * " . wordwrap($value[$key], 75, "\n * "); + } + return implode("\n", $value); + }, ['is_safe' => ['html']]), + new TwigFilter('comment3', function ($value) { + $value = explode("\n", $value); + foreach ($value as $key => $line) { + $value[$key] = " * " . wordwrap($value[$key], 75, "\n * "); + } + return implode("\n", $value); + }, ['is_safe' => ['html']]), + ]; + } } diff --git a/src/SDK/SDK.php b/src/SDK/SDK.php index 9c555d4e9..3f57d7a93 100644 --- a/src/SDK/SDK.php +++ b/src/SDK/SDK.php @@ -133,48 +133,6 @@ public function __construct(Language $language, Spec $spec) } return implode("\n", $value); }, ['is_safe' => ['html']])); - $this->twig->addFilter(new TwigFilter('comment2', function ($value) { - $value = explode("\n", $value); - foreach ($value as $key => $line) { - $value[$key] = " * " . wordwrap($value[$key], 75, "\n * "); - } - return implode("\n", $value); - }, ['is_safe' => ['html']])); - $this->twig->addFilter(new TwigFilter('comment3', function ($value) { - $value = explode("\n", $value); - foreach ($value as $key => $line) { - $value[$key] = " * " . wordwrap($value[$key], 75, "\n * "); - } - return implode("\n", $value); - }, ['is_safe' => ['html']])); - $this->twig->addFilter(new TwigFilter('dartComment', function ($value) { - $value = explode("\n", $value); - foreach ($value as $key => $line) { - $value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// "); - } - return implode("\n", $value); - }, ['is_safe' => ['html']])); - $this->twig->addFilter(new TwigFilter('dotnetComment', function ($value) { - $value = explode("\n", $value); - foreach ($value as $key => $line) { - $value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// "); - } - return implode("\n", $value); - }, ['is_safe' => ['html']])); - $this->twig->addFilter(new TwigFilter('swiftComment', function ($value) { - $value = explode("\n", $value); - foreach ($value as $key => $line) { - $value[$key] = " /// " . wordwrap($value[$key], 75, "\n /// "); - } - return implode("\n", $value); - }, ['is_safe' => ['html']])); - $this->twig->addFilter(new TwigFilter('rubyComment', function ($value) { - $value = explode("\n", $value); - foreach ($value as $key => $line) { - $value[$key] = " # " . wordwrap($line, 75, "\n # "); - } - return implode("\n", $value); - }, ['is_safe' => ['html']])); $this->twig->addFilter(new TwigFilter('escapeDollarSign', function ($value) { return str_replace('$', '\$', $value); }, ['is_safe'=>['html']])); @@ -191,13 +149,6 @@ public function __construct(Language $language, Spec $spec) $this->twig->addFilter(new TwigFilter('html', function ($value) { return $value; }, ['is_safe' => ['html']])); - $this->twig->addFilter(new TwigFilter('godocComment', function ($value) { - $value = explode("\n", $value); - foreach ($value as $key => $line) { - $value[$key] = "// " . wordwrap($value[$key], 75, "\n// "); - } - return implode("\n", $value); - }, ['is_safe' => ['html']])); $this->twig->addFilter(new TwigFilter('escapeKeyword', function ($value) use ($language) { if(in_array($value, $language->getKeywords())) { return 'x' . $value; @@ -205,14 +156,6 @@ public function __construct(Language $language, Spec $spec) return $value; }, ['is_safe' => ['html']])); - $this->twig->addFilter(new TwigFilter('ucFirstAndEscape', function ($value) use ($language) { - $value = ucfirst((string)$this->helperCamelCase($value)); - if(in_array($value, $language->getKeywords())) { - $value = 'x' . $value; - } - - return ucfirst((string)$this->helperCamelCase($value)); - }, ['is_safe' => ['html']])); $this->twig->addFilter(new TwigFilter('caseHTML', function ($value) { return $value; }, ['is_safe' => ['html']])); @@ -228,6 +171,11 @@ public function __construct(Language $language, Spec $spec) } return $value; })); + + // Language specific filters + foreach($language->getTwigFilters() as $filter) { + $this->twig->addFilter($filter); + } } /** From 4975b2bd8ea785dc6a4f49a3fdb4961dfc8f93f2 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 16 Jun 2022 01:54:04 +0000 Subject: [PATCH 2/4] fix method names --- src/SDK/Language/Dart.php | 2 +- src/SDK/Language/DotNet.php | 2 +- src/SDK/Language/Go.php | 2 +- src/SDK/Language/Ruby.php | 2 +- src/SDK/Language/Swift.php | 2 +- src/SDK/Language/Web.php | 14 ++++++++++++++ 6 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/SDK/Language/Dart.php b/src/SDK/Language/Dart.php index 923414723..f822261fd 100644 --- a/src/SDK/Language/Dart.php +++ b/src/SDK/Language/Dart.php @@ -436,7 +436,7 @@ public function getFiles() ]; } - public function getTwigFilters() + public function getFilters(): array { return [ new TwigFilter('dartComment', function ($value) { diff --git a/src/SDK/Language/DotNet.php b/src/SDK/Language/DotNet.php index b41861a92..374e9f373 100644 --- a/src/SDK/Language/DotNet.php +++ b/src/SDK/Language/DotNet.php @@ -378,7 +378,7 @@ public function getFiles() ]; } - public function getTwigFilters() + public function getFilters(): array { return [ new TwigFilter('dotnetComment', function ($value) { diff --git a/src/SDK/Language/Go.php b/src/SDK/Language/Go.php index dbf4a4eee..d480a3122 100644 --- a/src/SDK/Language/Go.php +++ b/src/SDK/Language/Go.php @@ -248,7 +248,7 @@ public function getParamExample(array $param) return $output; } - public function getTwigFilters() + public function getFilters(): array { return [ new TwigFilter('godocComment', function ($value) { diff --git a/src/SDK/Language/Ruby.php b/src/SDK/Language/Ruby.php index 949e7b596..9d13aa684 100644 --- a/src/SDK/Language/Ruby.php +++ b/src/SDK/Language/Ruby.php @@ -329,7 +329,7 @@ protected function jsonToHash(array $data):string return $output; } - public function getTwigFilters() + public function getFilters(): array { return [ new TwigFilter('rubyComment', function ($value) { diff --git a/src/SDK/Language/Swift.php b/src/SDK/Language/Swift.php index 1a8fea8a3..cc2b0aa31 100644 --- a/src/SDK/Language/Swift.php +++ b/src/SDK/Language/Swift.php @@ -434,7 +434,7 @@ public function getParamExample(array $param) return $output; } - public function getTwigFilters() + public function getFilters(): array { return [ new TwigFilter('swiftComment', function ($value) { diff --git a/src/SDK/Language/Web.php b/src/SDK/Language/Web.php index f1556c7c4..448414778 100644 --- a/src/SDK/Language/Web.php +++ b/src/SDK/Language/Web.php @@ -338,6 +338,20 @@ public function getFilters(): array new TwigFilter('getReturn', function (array $method, array $spec) { return $this->getReturn($method, $spec); }), + new TwigFilter('comment2', function ($value) { + $value = explode("\n", $value); + foreach ($value as $key => $line) { + $value[$key] = " * " . wordwrap($value[$key], 75, "\n * "); + } + return implode("\n", $value); + }, ['is_safe' => ['html']]), + new TwigFilter('comment3', function ($value) { + $value = explode("\n", $value); + foreach ($value as $key => $line) { + $value[$key] = " * " . wordwrap($value[$key], 75, "\n * "); + } + return implode("\n", $value); + }, ['is_safe' => ['html']]), ]; } } From 525d3d970ed3d911b0346931b1abc6913935fb26 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 16 Jun 2022 01:57:05 +0000 Subject: [PATCH 3/4] fix sdk --- src/SDK/SDK.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/SDK/SDK.php b/src/SDK/SDK.php index e0b1095b7..4eae44775 100644 --- a/src/SDK/SDK.php +++ b/src/SDK/SDK.php @@ -179,11 +179,6 @@ public function __construct(Language $language, Spec $spec) } return $value; })); - - // Language specific filters - foreach($language->getTwigFilters() as $filter) { - $this->twig->addFilter($filter); - } } /** From 9105b07aaa51c4889d079525dc89765f8b190d19 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Mon, 20 Jun 2022 06:54:45 +0000 Subject: [PATCH 4/4] empty response check --- src/SDK/Language/PHP.php | 18 ++++++++++++++++++ src/Spec/Swagger2.php | 5 +++++ templates/php/src/Services/Service.php.twig | 4 ++-- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/SDK/Language/PHP.php b/src/SDK/Language/PHP.php index a5d789d23..2f46390b5 100644 --- a/src/SDK/Language/PHP.php +++ b/src/SDK/Language/PHP.php @@ -3,6 +3,7 @@ namespace Appwrite\SDK\Language; use Appwrite\SDK\Language; +use Twig\TwigFilter; class PHP extends Language { @@ -356,4 +357,21 @@ protected function jsonToAssoc(array $data):string return $output; } + + protected function getReturn(array $method): string + { + if(($method['emptyResponse'] ?? true) || $method['type'] === 'location') { + return 'string'; + } + + return 'array'; + } + + public function getFilters(): array { + return [ + new TwigFilter('getReturn', function($value) { + return $this->getReturn($value); + }) + ]; + } } diff --git a/src/Spec/Swagger2.php b/src/Spec/Swagger2.php index 542fa4e17..9450d65c1 100644 --- a/src/Spec/Swagger2.php +++ b/src/Spec/Swagger2.php @@ -149,7 +149,11 @@ public function getMethods($service) $responses = $method['responses']; $responseModel = ''; + $emptyResponse = true; foreach($responses as $code => $desc) { + if($code != '204') { + $emptyResponse = false; + } if(isset($desc['schema']) && isset($desc['schema']['$ref'])) { $responseModel = $desc['schema']['$ref']; if(!empty($responseModel)) { @@ -178,6 +182,7 @@ public function getMethods($service) 'query' => [], 'body' => [], ], + 'emptyResponse' => $emptyResponse, 'responseModel' => $responseModel, ]; diff --git a/templates/php/src/Services/Service.php.twig b/templates/php/src/Services/Service.php.twig index 7e4d6ee02..e75d8e45f 100644 --- a/templates/php/src/Services/Service.php.twig +++ b/templates/php/src/Services/Service.php.twig @@ -20,10 +20,10 @@ class {{ service.name | caseUcfirst }} extends Service * @param {{ parameter.type | typeName }}${{ parameter.name | caseCamel | escapeKeyword }} {% endfor %} * @throws {{spec.title | caseUcfirst}}Exception - * @return {% if (method.type == 'location') %}string{% else %}array{% endif %} + * @return {{ method | getReturn }} */ - public function {{ method.name | caseCamel }}({% for parameter in method.parameters.all %}{{ parameter.type | typeName }}${{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required %} = null{% endif %}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, callable $onProgress = null{% endif %}): {% if (method.type == 'location') %}string{% else %}array{% endif %} + public function {{ method.name | caseCamel }}({% for parameter in method.parameters.all %}{{ parameter.type | typeName }}${{ parameter.name | caseCamel | escapeKeyword }}{% if not parameter.required %} = null{% endif %}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in method.consumes %}, callable $onProgress = null{% endif %}): {{ method | getReturn }} { {% for parameter in method.parameters.all %}