Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PHP] Refactor php client generator #504

Merged
merged 29 commits into from
Jul 17, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
ff00b19
Extends AbstractPhpCodegen instead of DefaultCodegen
ackintosh Jul 8, 2018
ad58695
Remove fully duplicated methods with AbstractPhpCodegen
ackintosh Jul 8, 2018
d841d95
Remove duplicated properties with AbstractPhpCodegen
ackintosh Jul 8, 2018
3c34c0b
Remove duplicated codes in constructor with AbstractPhpCodegen
ackintosh Jul 8, 2018
c731696
Add typeMapping "date". Moved from PhpClientCodegen
ackintosh Jul 8, 2018
296e6d3
Remove duplicated codes in processOpts()
ackintosh Jul 8, 2018
2059ba3
Remove unnecessary 'implements'
ackintosh Jul 8, 2018
7c0659c
Remove unnecessary method override
ackintosh Jul 8, 2018
46be8c8
Use setter
ackintosh Jul 8, 2018
0356486
Merge getTypeDeclaration() into AbstractPhpCodegen
ackintosh Jul 8, 2018
4e7b7af
Merge processOpts() into AbstractPhpCodegen
ackintosh Jul 8, 2018
36d1e17
tweak
ackintosh Jul 8, 2018
f84896d
Optimize IF statement
ackintosh Jul 8, 2018
2ad0f6f
Remove duplicated methods
ackintosh Jul 8, 2018
9272d65
Merge setParameterExampleValue() into AbstractPhpCodegen
ackintosh Jul 8, 2018
3dff45c
Merge toEnumVarName() into AbstractPhpCodegen
ackintosh Jul 8, 2018
73d36f4
Merge toEnumName() into AbstractPhpCodegen
ackintosh Jul 8, 2018
38e5f29
Merge escapeUnsafeCharacters() into AbstractPhpCodegen
ackintosh Jul 8, 2018
0d1fac8
Merge postProcessOperationsWithModels() into AbstractPhpCodegen
ackintosh Jul 8, 2018
3dc3215
tweak
ackintosh Jul 8, 2018
7feec3d
Recover missing method
ackintosh Jul 8, 2018
c6fbe8b
Tweak test case
ackintosh Jul 9, 2018
be8f9fe
Remove unnecessary 'import'
ackintosh Jul 9, 2018
9672fa6
Update lumen and ze-ph samples
ackintosh Jul 9, 2018
a1e7a8e
Merge remote-tracking branch 'origin/master' into refactor-php-client…
ackintosh Jul 9, 2018
2702c90
Update slim samples
ackintosh Jul 9, 2018
4e432af
Fix script name
ackintosh Jul 9, 2018
3846ba2
Update silex samples
ackintosh Jul 9, 2018
939ada4
Update kotlin-server
ackintosh Jul 9, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bin/utils/ensure-up-to-date
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ sleep 5
./bin/php-silex-petstore-server.sh > /dev/null 2>&1
./bin/php-symfony-petstore.sh > /dev/null 2>&1
./bin/php-lumen-petstore-server.sh > /dev/null 2>&1
./bin/php-slim-petstore-server.sh > /dev/null 2>&1
./bin/php-slim-server-petstore.sh > /dev/null 2>&1
./bin/php-ze-ph-petstore-server.sh > /dev/null 2>&1
./bin/openapi3/php-petstore.sh > /dev/null 2>&1
./bin/typescript-angular-petstore-all.sh > /dev/null 2>&1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ public AbstractPhpCodegen() {
typeMapping.put("string", "string");
typeMapping.put("byte", "int");
typeMapping.put("boolean", "bool");
typeMapping.put("date", "\\DateTime");
typeMapping.put("Date", "\\DateTime");
typeMapping.put("DateTime", "\\DateTime");
typeMapping.put("file", "\\SplFileObject");
Expand Down Expand Up @@ -170,17 +171,25 @@ public void processOpts() {

if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE));

// Update the invokerPackage for the default apiPackage and modelPackage
apiPackage = invokerPackage + "\\" + apiDirName;
modelPackage = invokerPackage + "\\" + modelDirName;
} else {
additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage);
}

if (!additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) {
additionalProperties.put(CodegenConstants.MODEL_PACKAGE, modelPackage);
if (additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) {
// Update model package to contain the specified model package name and the invoker package
modelPackage = invokerPackage + "\\" + (String) additionalProperties.get(CodegenConstants.MODEL_PACKAGE);
}
additionalProperties.put(CodegenConstants.MODEL_PACKAGE, modelPackage);

if (!additionalProperties.containsKey(CodegenConstants.API_PACKAGE)) {
additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage);
if (additionalProperties.containsKey(CodegenConstants.API_PACKAGE)) {
// Update api package to contain the specified api package name and the invoker package
apiPackage = invokerPackage + "\\" + (String) additionalProperties.get(CodegenConstants.API_PACKAGE);
}
additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage);

// if (additionalProperties.containsKey(COMPOSER_PROJECT_NAME)) {
// this.setComposerProjectName((String) additionalProperties.get(COMPOSER_PROJECT_NAME));
Expand Down Expand Up @@ -329,7 +338,7 @@ public String getTypeDeclaration(Schema p) {
} else if (ModelUtils.isMapSchema(p)) {
Schema inner = (Schema) p.getAdditionalProperties();
return getSchemaType(p) + "[string," + getTypeDeclaration(inner) + "]";
} else if (!StringUtils.isEmpty(p.get$ref())) { // model
} else if (StringUtils.isNotBlank(p.get$ref())) { // model
String type = super.getTypeDeclaration(p);
return (!languageSpecificPrimitives.contains(type))
? "\\" + modelPackage + "\\" + type : type;
Expand Down Expand Up @@ -542,11 +551,11 @@ public void setParameterExampleValue(CodegenParameter p) {
type = p.dataType;
}

if ("String".equalsIgnoreCase(type)) {
if ("String".equalsIgnoreCase(type) || p.isString) {
if (example == null) {
example = p.paramName + "_example";
example = "'" + p.paramName + "_example'";
}
example = "\"" + escapeText(example) + "\"";
example = escapeText(example);
} else if ("Integer".equals(type) || "int".equals(type)) {
if (example == null) {
example = "56";
Expand All @@ -559,21 +568,23 @@ public void setParameterExampleValue(CodegenParameter p) {
if (example == null) {
example = "True";
}
} else if ("\\SplFileObject".equalsIgnoreCase(type)) {
} else if ("\\SplFileObject".equalsIgnoreCase(type) || p.isFile) {
if (example == null) {
example = "/path/to/file";
example = "/path/to/file.txt";
}
example = "\"" + escapeText(example) + "\"";
} else if ("Date".equalsIgnoreCase(type)) {
} else if ("\\Date".equalsIgnoreCase(type)) {
if (example == null) {
example = "2013-10-20";
}
example = "new \\DateTime(\"" + escapeText(example) + "\")";
} else if ("DateTime".equalsIgnoreCase(type)) {
} else if ("\\DateTime".equalsIgnoreCase(type)) {
if (example == null) {
example = "2013-10-20T19:20:30+01:00";
}
example = "new \\DateTime(\"" + escapeText(example) + "\")";
} else if ("object".equals(type)) {
example = "new \\stdClass";
} else if (!languageSpecificPrimitives.contains(type)) {
// type is a model class, e.g. User
example = "new " + getTypeDeclaration(type) + "()";
Expand Down Expand Up @@ -631,8 +642,8 @@ public String toEnumVarName(String name, String datatype) {
enumName = enumName.replaceFirst("^_", "");
enumName = enumName.replaceFirst("_$", "");

if (enumName.matches("\\d.*")) { // starts with number
return "_" + enumName;
if (isReservedWord(enumName) || enumName.matches("\\d.*")) { // reserved word or starts with number
return escapeReservedWord(enumName);
} else {
return enumName;
}
Expand All @@ -642,6 +653,9 @@ public String toEnumVarName(String name, String datatype) {
public String toEnumName(CodegenProperty property) {
String enumName = underscore(toModelName(property.name)).toUpperCase();

// remove [] for array or map of enum
enumName = enumName.replace("[]", "");

if (enumName.matches("\\d.*")) { // starts with number
return "_" + enumName;
} else {
Expand All @@ -660,6 +674,8 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
for (CodegenOperation op : operationList) {
// for API test method name
// e.g. public function test{{vendorExtensions.x-testOperationId}}()
op.vendorExtensions.put("x-testOperationId", camelize(op.operationId));
}
return objs;
Expand All @@ -673,7 +689,17 @@ public String escapeQuotationMark(String input) {

@Override
public String escapeUnsafeCharacters(String input) {
return input.replace("*/", "");
return input.replace("*/", "*_/").replace("/*", "/_*");
}

@Override
public String escapeText(String input) {
if (input == null) {
return input;
}

// Trim the string to avoid leading and trailing spaces.
return super.escapeText(input).trim();
}

protected String extractSimpleName(String phpClassName) {
Expand Down
Loading