Improve api name for the Clojure client

For example, when an operation's tag is "users-api", "users_api" or
"UsersApi", generate the api file named users_api.clj and "users-api"
as the namespace (it was "usersapi.clj" and "usersapi" before).

To implement this, I have to move the "sanitizeTag" method from
DefaultGenerator.java to DefaultCodegen.java so that its behaviour can
be overridden in ClojureClientCodegen.java, which is needed as the
default implementation would sanitize "users-api" to "usersapi" before
the tag is passed to "toApiName" and "toApiFilename".
This commit is contained in:
xhh 2016-03-01 18:50:56 +08:00
parent 9aa59b92bc
commit 09a2bb8b0f
5 changed files with 60 additions and 16 deletions

View File

@ -105,6 +105,8 @@ public interface CodegenConfig {
void processSwagger(Swagger swagger); void processSwagger(Swagger swagger);
String sanitizeTag(String tag);
String toApiFilename(String name); String toApiFilename(String name);
String toModelFilename(String name); String toModelFilename(String name);

View File

@ -2293,6 +2293,19 @@ public class DefaultCodegen {
return name.replaceAll("[^a-zA-Z0-9_]", ""); return name.replaceAll("[^a-zA-Z0-9_]", "");
} }
@SuppressWarnings("static-method")
public String sanitizeTag(String tag) {
// remove spaces and make strong case
String[] parts = tag.split(" ");
StringBuilder buf = new StringBuilder();
for (String part : parts) {
if (StringUtils.isNotEmpty(part)) {
buf.append(StringUtils.capitalize(part));
}
}
return buf.toString().replaceAll("[^a-zA-Z ]", "");
}
/** /**
* Only write if the file doesn't exist * Only write if the file doesn't exist
* *

View File

@ -15,7 +15,6 @@ import org.slf4j.LoggerFactory;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
import static org.apache.commons.lang3.StringUtils.capitalize;
import static org.apache.commons.lang3.StringUtils.isNotEmpty; import static org.apache.commons.lang3.StringUtils.isNotEmpty;
public class DefaultGenerator extends AbstractGenerator implements Generator { public class DefaultGenerator extends AbstractGenerator implements Generator {
@ -623,8 +622,8 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
try { try {
co = config.fromOperation(resourcePath, httpMethod, operation, swagger.getDefinitions(), swagger); co = config.fromOperation(resourcePath, httpMethod, operation, swagger.getDefinitions(), swagger);
co.tags = new ArrayList<String>(); co.tags = new ArrayList<String>();
co.tags.add(sanitizeTag(tag)); co.tags.add(config.sanitizeTag(tag));
config.addOperationToGroup(sanitizeTag(tag), resourcePath, operation, co, operations); config.addOperationToGroup(config.sanitizeTag(tag), resourcePath, operation, co, operations);
List<Map<String, List<String>>> securities = operation.getSecurity(); List<Map<String, List<String>>> securities = operation.getSecurity();
if (securities == null && swagger.getSecurity() != null) { if (securities == null && swagger.getSecurity() != null) {
@ -683,19 +682,6 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
return parameter.getName() + ":" + parameter.getIn(); return parameter.getName() + ":" + parameter.getIn();
} }
@SuppressWarnings("static-method")
protected String sanitizeTag(String tag) {
// remove spaces and make strong case
String[] parts = tag.split(" ");
StringBuilder buf = new StringBuilder();
for (String part : parts) {
if (isNotEmpty(part)) {
buf.append(capitalize(part));
}
}
return buf.toString().replaceAll("[^a-zA-Z ]", "");
}
@SuppressWarnings("static-method") @SuppressWarnings("static-method")
public Map<String, Object> processOperations(CodegenConfig config, String tag, List<CodegenOperation> ops) { public Map<String, Object> processOperations(CodegenConfig config, String tag, List<CodegenOperation> ops) {
Map<String, Object> operations = new HashMap<String, Object>(); Map<String, Object> operations = new HashMap<String, Object>();

View File

@ -145,6 +145,11 @@ public class ClojureClientCodegen extends DefaultCodegen implements CodegenConfi
supportingFiles.add(new SupportingFile("core.mustache", baseNamespaceFolder, "core.clj")); supportingFiles.add(new SupportingFile("core.mustache", baseNamespaceFolder, "core.clj"));
} }
@Override
public String sanitizeTag(String tag) {
return tag.replaceAll("[^a-zA-Z_]+", "_");
}
@Override @Override
public String apiFileFolder() { public String apiFileFolder() {
return outputFolder + File.separator + sourceFolder + File.separator + namespaceToFolder(apiPackage); return outputFolder + File.separator + sourceFolder + File.separator + namespaceToFolder(apiPackage);

View File

@ -0,0 +1,38 @@
package io.swagger.codegen.languages;
import org.testng.Assert;
import org.testng.annotations.Test;
public class ClojureClientCodegenTest {
ClojureClientCodegen codegen = new ClojureClientCodegen();
@Test
public void testSanitizeTag() throws Exception {
Assert.assertEquals(codegen.sanitizeTag("users-api"), "users_api");
Assert.assertEquals(codegen.sanitizeTag("users_api"), "users_api");
Assert.assertEquals(codegen.sanitizeTag("users api"), "users_api");
Assert.assertEquals(codegen.sanitizeTag("users.api"), "users_api");
Assert.assertEquals(codegen.sanitizeTag("Users Api"), "Users_Api");
Assert.assertEquals(codegen.sanitizeTag("UsersApi"), "UsersApi");
Assert.assertEquals(codegen.sanitizeTag("usersapi"), "usersapi");
Assert.assertEquals(codegen.sanitizeTag("Usersapi"), "Usersapi");
}
@Test
public void testToApiName() throws Exception {
Assert.assertEquals(codegen.toApiName("users_api"), "users-api");
Assert.assertEquals(codegen.toApiName("Users_Api"), "users-api");
Assert.assertEquals(codegen.toApiName("UsersApi"), "users-api");
Assert.assertEquals(codegen.toApiName("usersapi"), "usersapi");
Assert.assertEquals(codegen.toApiName("Usersapi"), "usersapi");
}
@Test
public void testToApiFilename() throws Exception {
Assert.assertEquals(codegen.toApiFilename("users_api"), "users_api");
Assert.assertEquals(codegen.toApiFilename("Users_Api"), "users_api");
Assert.assertEquals(codegen.toApiFilename("UsersApi"), "users_api");
Assert.assertEquals(codegen.toApiFilename("usersapi"), "usersapi");
Assert.assertEquals(codegen.toApiFilename("Usersapi"), "usersapi");
}
}