Skip to content

Commit

Permalink
Merge pull request #8086 from stianlik/issue-6530
Browse files Browse the repository at this point in the history
Add option modelPropertyNaming to javascript generator
  • Loading branch information
HugoMario authored May 25, 2018
2 parents 9e08dd5 + c720ad4 commit faf1c93
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
protected String apiTestPath = "api/";
protected String modelTestPath = "model/";
protected boolean useES6 = false; // default is ES5
private String modelPropertyNaming = "camelCase";

public JavascriptClientCodegen() {
super();
Expand Down Expand Up @@ -200,6 +201,7 @@ public JavascriptClientCodegen() {
cliOptions.add(new CliOption(USE_ES6,
"use JavaScript ES6 (ECMAScript 6) (beta). Default is ES5.")
.defaultValue(Boolean.FALSE.toString()));
cliOptions.add(new CliOption(CodegenConstants.MODEL_PROPERTY_NAMING, CodegenConstants.MODEL_PROPERTY_NAMING_DESC).defaultValue("camelCase"));
}

@Override
Expand Down Expand Up @@ -265,6 +267,9 @@ public void processOpts() {
if (additionalProperties.containsKey(EMIT_JS_DOC)) {
setEmitJSDoc(convertPropertyToBooleanAndWriteBack(EMIT_JS_DOC));
}
if (additionalProperties.containsKey(CodegenConstants.MODEL_PROPERTY_NAMING)) {
setModelPropertyNaming((String) additionalProperties.get(CodegenConstants.MODEL_PROPERTY_NAMING));
}
}

@Override
Expand Down Expand Up @@ -485,6 +490,22 @@ public String toModelTestFilename(String name) {
return toModelName(name) + ".spec";
}

public String getModelPropertyNaming() {
return this.modelPropertyNaming;
}

private String getNameUsingModelPropertyNaming(String name) {
switch (CodegenConstants.MODEL_PROPERTY_NAMING_TYPE.valueOf(getModelPropertyNaming())) {
case original: return name;
case camelCase: return camelize(name, true);
case PascalCase: return camelize(name);
case snake_case: return underscore(name);
default: throw new IllegalArgumentException("Invalid model property naming '" +
name + "'. Must be 'original', 'camelCase', " +
"'PascalCase' or 'snake_case'");
}
}

@Override
public String toVarName(String name) {
// sanitize name
Expand All @@ -501,7 +522,7 @@ public String toVarName(String name) {

// camelize (lower first character) the variable name
// pet_id => petId
name = camelize(name, true);
name = getNameUsingModelPropertyNaming(name);

// for reserved word or word starting with number, append _
if (isReservedWord(name) || name.matches("^\\d.*")) {
Expand Down Expand Up @@ -621,6 +642,17 @@ public String toDefaultValue(Property p) {
return null;
}

public void setModelPropertyNaming(String naming) {
if ("original".equals(naming) || "camelCase".equals(naming) ||
"PascalCase".equals(naming) || "snake_case".equals(naming)) {
this.modelPropertyNaming = naming;
} else {
throw new IllegalArgumentException("Invalid model property naming '" +
naming + "'. Must be 'original', 'camelCase', " +
"'PascalCase' or 'snake_case'");
}
}

@Override
public String toDefaultValueWithParam(String name, Property p) {
String type = normalizeType(getTypeDeclaration(p));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import io.swagger.codegen.options.JavaScriptOptionsProvider;
import io.swagger.codegen.languages.JavascriptClientCodegen;
import io.swagger.codegen.options.OptionsProvider;

import mockit.Expectations;
import mockit.Tested;

Expand Down Expand Up @@ -70,6 +69,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setUseES6(Boolean.valueOf(JavaScriptOptionsProvider.USE_ES6_VALUE));
times = 1;
clientCodegen.setModelPropertyNaming(JavaScriptOptionsProvider.MODEL_PROPERTY_NAMING_VALUE);
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class JavaScriptOptionsProvider implements OptionsProvider {
public static final String EMIT_JS_DOC_VALUE = "false";
public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false";
public static final String USE_ES6_VALUE = "true";

public static final String MODEL_PROPERTY_NAMING_VALUE = "camelCase";

private ImmutableMap<String, String> options;

Expand Down Expand Up @@ -63,6 +63,7 @@ public JavaScriptOptionsProvider() {
.put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "true")
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
.put(JavascriptClientCodegen.USE_ES6, USE_ES6_VALUE)
.put(CodegenConstants.MODEL_PROPERTY_NAMING, MODEL_PROPERTY_NAMING_VALUE)
.build();
}

Expand Down

0 comments on commit faf1c93

Please sign in to comment.