Fix issue with Ruby client where strings from example properties are not wrapped with quotes (#987)

This commit is contained in:
Nathan Broadbent 2018-11-04 16:10:35 +07:00 committed by William Cheng
parent eb5a8cc752
commit 63b1c233c9
4 changed files with 61 additions and 0 deletions

View File

@ -18,6 +18,8 @@
package org.openapitools.codegen.languages; package org.openapitools.codegen.languages;
import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.examples.Example;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*; import org.openapitools.codegen.*;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -536,6 +538,34 @@ public class RubyClientCodegen extends AbstractRubyCodegen {
p.example = example; p.example = example;
} }
/**
* Return the example value of the parameter. Overrides the
* setParameterExampleValue(CodegenParameter, Parameter) method in
* DefaultCodegen to always call setParameterExampleValue(CodegenParameter)
* in this class, which adds single quotes around strings from the
* x-example property.
*
* @param codegenParameter Codegen parameter
* @param parameter Parameter
*/
public void setParameterExampleValue(CodegenParameter codegenParameter, Parameter parameter) {
if (parameter.getExample() != null) {
codegenParameter.example = parameter.getExample().toString();
} else if (parameter.getExamples() != null && !parameter.getExamples().isEmpty()) {
Example example = parameter.getExamples().values().iterator().next();
if (example.getValue() != null) {
codegenParameter.example = example.getValue().toString();
}
} else {
Schema schema = parameter.getSchema();
if (schema != null && schema.getExample() != null) {
codegenParameter.example = schema.getExample().toString();
}
}
setParameterExampleValue(codegenParameter);
}
public void setGemName(String gemName) { public void setGemName(String gemName) {
this.gemName = gemName; this.gemName = gemName;
} }

View File

@ -271,4 +271,33 @@ public class RubyClientCodegenTest {
// TODO comment out the following until https://github.com/swagger-api/swagger-parser/issues/820 is solved // TODO comment out the following until https://github.com/swagger-api/swagger-parser/issues/820 is solved
//Assert.assertTrue(status.isNullable); //Assert.assertTrue(status.isNullable);
} }
@Test(description = "test example string imported from x-example parameterr (OAS2)")
public void exampleStringFromExampleParameterOAS2Test() {
final OpenAPI openAPI = new OpenAPIParser().readLocation("src/test/resources/2_0/petstore-nullable.yaml", null, new ParseOptions()).getOpenAPI();
final RubyClientCodegen codegen = new RubyClientCodegen();
codegen.setModuleName("OnlinePetstore");
final String path = "/store/order/{orderId}";
final Operation p = openAPI.getPaths().get(path).getDelete();
final CodegenOperation op = codegen.fromOperation(path, "delete", p, openAPI.getComponents().getSchemas());
CodegenParameter pp = op.pathParams.get(0);
Assert.assertEquals(pp.example, "'orderid123'");
}
@Test(description = "test example string imported from example in schema (OAS3)")
public void exampleStringFromXExampleParameterOAS3Test() {
final OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/petstore_oas3_test.yaml", null, new ParseOptions()).getOpenAPI();
final RubyClientCodegen codegen = new RubyClientCodegen();
codegen.setModuleName("OnlinePetstore");
final String path = "/store/order/{orderId}";
final Operation p = openAPI.getPaths().get(path).getDelete();
final CodegenOperation op = codegen.fromOperation(path, "delete", p, openAPI.getComponents().getSchemas());
CodegenParameter pp = op.pathParams.get(0);
Assert.assertEquals(pp.example, "'orderid123'");
}
} }

View File

@ -361,6 +361,7 @@ paths:
description: ID of the order that needs to be deleted description: ID of the order that needs to be deleted
required: true required: true
type: string type: string
x-example: orderid123
responses: responses:
'400': '400':
description: Invalid ID supplied description: Invalid ID supplied

View File

@ -360,6 +360,7 @@ paths:
required: true required: true
schema: schema:
type: string type: string
example: orderid123
responses: responses:
'400': '400':
description: Invalid ID supplied description: Invalid ID supplied