Skip to content

Commit faf1c93

Browse files
authored
Merge pull request #8086 from stianlik/issue-6530
Add option modelPropertyNaming to javascript generator
2 parents 9e08dd5 + c720ad4 commit faf1c93

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java

+33-1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
9696
protected String apiTestPath = "api/";
9797
protected String modelTestPath = "model/";
9898
protected boolean useES6 = false; // default is ES5
99+
private String modelPropertyNaming = "camelCase";
99100

100101
public JavascriptClientCodegen() {
101102
super();
@@ -200,6 +201,7 @@ public JavascriptClientCodegen() {
200201
cliOptions.add(new CliOption(USE_ES6,
201202
"use JavaScript ES6 (ECMAScript 6) (beta). Default is ES5.")
202203
.defaultValue(Boolean.FALSE.toString()));
204+
cliOptions.add(new CliOption(CodegenConstants.MODEL_PROPERTY_NAMING, CodegenConstants.MODEL_PROPERTY_NAMING_DESC).defaultValue("camelCase"));
203205
}
204206

205207
@Override
@@ -265,6 +267,9 @@ public void processOpts() {
265267
if (additionalProperties.containsKey(EMIT_JS_DOC)) {
266268
setEmitJSDoc(convertPropertyToBooleanAndWriteBack(EMIT_JS_DOC));
267269
}
270+
if (additionalProperties.containsKey(CodegenConstants.MODEL_PROPERTY_NAMING)) {
271+
setModelPropertyNaming((String) additionalProperties.get(CodegenConstants.MODEL_PROPERTY_NAMING));
272+
}
268273
}
269274

270275
@Override
@@ -485,6 +490,22 @@ public String toModelTestFilename(String name) {
485490
return toModelName(name) + ".spec";
486491
}
487492

493+
public String getModelPropertyNaming() {
494+
return this.modelPropertyNaming;
495+
}
496+
497+
private String getNameUsingModelPropertyNaming(String name) {
498+
switch (CodegenConstants.MODEL_PROPERTY_NAMING_TYPE.valueOf(getModelPropertyNaming())) {
499+
case original: return name;
500+
case camelCase: return camelize(name, true);
501+
case PascalCase: return camelize(name);
502+
case snake_case: return underscore(name);
503+
default: throw new IllegalArgumentException("Invalid model property naming '" +
504+
name + "'. Must be 'original', 'camelCase', " +
505+
"'PascalCase' or 'snake_case'");
506+
}
507+
}
508+
488509
@Override
489510
public String toVarName(String name) {
490511
// sanitize name
@@ -501,7 +522,7 @@ public String toVarName(String name) {
501522

502523
// camelize (lower first character) the variable name
503524
// pet_id => petId
504-
name = camelize(name, true);
525+
name = getNameUsingModelPropertyNaming(name);
505526

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

645+
public void setModelPropertyNaming(String naming) {
646+
if ("original".equals(naming) || "camelCase".equals(naming) ||
647+
"PascalCase".equals(naming) || "snake_case".equals(naming)) {
648+
this.modelPropertyNaming = naming;
649+
} else {
650+
throw new IllegalArgumentException("Invalid model property naming '" +
651+
naming + "'. Must be 'original', 'camelCase', " +
652+
"'PascalCase' or 'snake_case'");
653+
}
654+
}
655+
624656
@Override
625657
public String toDefaultValueWithParam(String name, Property p) {
626658
String type = normalizeType(getTypeDeclaration(p));

modules/swagger-codegen/src/test/java/io/swagger/codegen/javascript/JavaScriptClientOptionsTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import io.swagger.codegen.options.JavaScriptOptionsProvider;
66
import io.swagger.codegen.languages.JavascriptClientCodegen;
77
import io.swagger.codegen.options.OptionsProvider;
8-
98
import mockit.Expectations;
109
import mockit.Tested;
1110

@@ -70,6 +69,8 @@ protected void setExpectations() {
7069
times = 1;
7170
clientCodegen.setUseES6(Boolean.valueOf(JavaScriptOptionsProvider.USE_ES6_VALUE));
7271
times = 1;
72+
clientCodegen.setModelPropertyNaming(JavaScriptOptionsProvider.MODEL_PROPERTY_NAMING_VALUE);
73+
times = 1;
7374
}};
7475
}
7576
}

modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JavaScriptOptionsProvider.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class JavaScriptOptionsProvider implements OptionsProvider {
3030
public static final String EMIT_JS_DOC_VALUE = "false";
3131
public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false";
3232
public static final String USE_ES6_VALUE = "true";
33-
33+
public static final String MODEL_PROPERTY_NAMING_VALUE = "camelCase";
3434

3535
private ImmutableMap<String, String> options;
3636

@@ -63,6 +63,7 @@ public JavaScriptOptionsProvider() {
6363
.put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "true")
6464
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
6565
.put(JavascriptClientCodegen.USE_ES6, USE_ES6_VALUE)
66+
.put(CodegenConstants.MODEL_PROPERTY_NAMING, MODEL_PROPERTY_NAMING_VALUE)
6667
.build();
6768
}
6869

0 commit comments

Comments
 (0)