From 1df0923525035d7ef939c6a25f3fd0961b1f0df6 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 11 Mar 2016 15:23:55 +0800 Subject: [PATCH] Ruby: improve handling of default values and examples for parameters in docs --- .../codegen/languages/RubyClientCodegen.java | 70 +++++++++++++++---- .../src/main/resources/ruby/api_doc.mustache | 4 +- samples/client/petstore/ruby/README.md | 2 +- samples/client/petstore/ruby/docs/PetApi.md | 6 +- samples/client/petstore/ruby/docs/StoreApi.md | 2 +- .../{Category_spec.rb => category_spec.rb} | 0 .../models/{Order_spec.rb => order_spec.rb} | 0 .../spec/models/{Pet_spec.rb => pet_spec.rb} | 0 .../spec/models/{Tag_spec.rb => tag_spec.rb} | 0 .../models/{User_spec.rb => user_spec.rb} | 0 10 files changed, 65 insertions(+), 19 deletions(-) rename samples/client/petstore/ruby/spec/models/{Category_spec.rb => category_spec.rb} (100%) rename samples/client/petstore/ruby/spec/models/{Order_spec.rb => order_spec.rb} (100%) rename samples/client/petstore/ruby/spec/models/{Pet_spec.rb => pet_spec.rb} (100%) rename samples/client/petstore/ruby/spec/models/{Tag_spec.rb => tag_spec.rb} (100%) rename samples/client/petstore/ruby/spec/models/{User_spec.rb => user_spec.rb} (100%) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java index ede3a23c898..5c03720a20d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RubyClientCodegen.java @@ -532,19 +532,65 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { @Override public void setParameterExampleValue(CodegenParameter p) { - // NOTE: Can not get default value from ArrayProperty - //String defaultValue = p.defaultValue; - //if (!StringUtils.isEmpty(defaultValue)) { - // p.example = defaultValue; - // return; - //} - if (Boolean.TRUE.equals(p.isString) || Boolean.TRUE.equals(p.isBinary) || Boolean.TRUE.equals(p.isByteArray)) { - p.example = "\"" + escapeText(p.example) + "\""; - } else if (Boolean.TRUE.equals(p.isFile)) { - p.example = "File.new(\"" + escapeText(p.example) + "\")"; - } else if (Boolean.TRUE.equals(p.isDateTime) || Boolean.TRUE.equals(p.isDate)) { - p.example = "Date.parse(\"" + escapeText(p.example) + "\")"; + String example; + + if (p.defaultValue == null) { + example = p.example; + } else { + example = p.defaultValue; } + + String type = p.baseType; + if (type == null) { + type = p.dataType; + } + + if ("String".equals(type)) { + if (example == null) { + example = p.paramName + "_example"; + } + example = "\"" + escapeText(example) + "\""; + } else if ("Integer".equals(type)) { + if (example == null) { + example = "56"; + } + } else if ("Float".equals(type)) { + if (example == null) { + example = "3.4"; + } + } else if ("BOOLEAN".equals(type)) { + if (example == null) { + example = "true"; + } + } else if ("File".equals(type)) { + if (example == null) { + example = "/path/to/file"; + } + example = "File.new(\"" + escapeText(example) + "\")"; + } else if ("Date".equals(type)) { + if (example == null) { + example = "2013-10-20"; + } + example = "Date.parse(\"" + escapeText(example) + "\")"; + } else if ("DateTime".equals(type)) { + if (example == null) { + example = "2013-10-20T19:20:30+01:00"; + } + example = "DateTime.parse(\"" + escapeText(example) + "\")"; + } else if (!languageSpecificPrimitives.contains(type)) { + // type is a model class, e.g. User + example = moduleName + "::" + type + ".new"; + } + + if (example == null) { + example = "nil"; + } else if (Boolean.TRUE.equals(p.isListContainer)) { + example = "[" + example + "]"; + } else if (Boolean.TRUE.equals(p.isMapContainer)) { + example = "{'key': " + example + "}"; + } + + p.example = example; } public void setGemName(String gemName) { diff --git a/modules/swagger-codegen/src/main/resources/ruby/api_doc.mustache b/modules/swagger-codegen/src/main/resources/ruby/api_doc.mustache index 08050f3949e..74dcf9c6454 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/api_doc.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/api_doc.mustache @@ -21,10 +21,10 @@ Method | HTTP request | Description ```ruby api = {{{moduleName}}}::{{{classname}}}.new{{#hasParams}} {{#vendorExtensions.x-codegen-hasRequiredParams}}{{#allParams}}{{#required}} -{{{paramName}}} = {{#isListContainer}}[{{/isListContainer}}{{#isBodyParam}}{{{moduleName}}}::{{{baseType}}}.new{{/isBodyParam}}{{^isBodyParam}}{{{example}}}{{/isBodyParam}}{{#isListContainer}}]{{/isListContainer}} # [{{{dataType}}}] {{{description}}} +{{{paramName}}} = {{{example}}} # [{{{dataType}}}] {{{description}}} {{/required}}{{/allParams}}{{/vendorExtensions.x-codegen-hasRequiredParams}}{{#hasOptionalParams}} opts = { {{#allParams}}{{^required}} - {{{paramName}}}: {{#isListContainer}}[{{/isListContainer}}{{#isBodyParam}}{{{moduleName}}}::{{{baseType}}}.new{{/isBodyParam}}{{^isBodyParam}}{{{example}}}{{/isBodyParam}}{{#isListContainer}}]{{/isListContainer}}{{#vendorExtensions.x-codegen-hasMoreOptional}},{{/vendorExtensions.x-codegen-hasMoreOptional}} # [{{{dataType}}}] {{{description}}}{{/required}}{{/allParams}} + {{{paramName}}}: {{{example}}}{{#vendorExtensions.x-codegen-hasMoreOptional}},{{/vendorExtensions.x-codegen-hasMoreOptional}} # [{{{dataType}}}] {{{description}}}{{/required}}{{/allParams}} }{{/hasOptionalParams}}{{/hasParams}} begin diff --git a/samples/client/petstore/ruby/README.md b/samples/client/petstore/ruby/README.md index 9c9b686c5b5..6674e022074 100644 --- a/samples/client/petstore/ruby/README.md +++ b/samples/client/petstore/ruby/README.md @@ -6,7 +6,7 @@ Version: 1.0.0 Automatically generated by the Ruby Swagger Codegen project: -- Build date: 2016-03-10T17:17:33.736+08:00 +- Build date: 2016-03-11T15:13:56.730+08:00 - Build package: class io.swagger.codegen.languages.RubyClientCodegen ## Installation diff --git a/samples/client/petstore/ruby/docs/PetApi.md b/samples/client/petstore/ruby/docs/PetApi.md index fc9d4ecb276..5218d4dc3b5 100644 --- a/samples/client/petstore/ruby/docs/PetApi.md +++ b/samples/client/petstore/ruby/docs/PetApi.md @@ -72,7 +72,7 @@ Fake endpoint to test byte array in body parameter for adding a new pet to the s api = Petstore::PetApi.new opts = { - body: Petstore::String.new # [String] Pet object in the form of byte array + body: "B" # [String] Pet object in the form of byte array } begin @@ -161,7 +161,7 @@ Multiple status values can be provided with comma separated strings api = Petstore::PetApi.new opts = { - status: [] # [Array] Status values that need to be considered for query + status: ["available"] # [Array] Status values that need to be considered for query } begin @@ -204,7 +204,7 @@ Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 api = Petstore::PetApi.new opts = { - tags: [] # [Array] Tags to filter by + tags: ["tags_example"] # [Array] Tags to filter by } begin diff --git a/samples/client/petstore/ruby/docs/StoreApi.md b/samples/client/petstore/ruby/docs/StoreApi.md index da2b4219680..4655955d246 100644 --- a/samples/client/petstore/ruby/docs/StoreApi.md +++ b/samples/client/petstore/ruby/docs/StoreApi.md @@ -66,7 +66,7 @@ A single status value can be provided as a string api = Petstore::StoreApi.new opts = { - status: "status_example" # [String] Status value that needs to be considered for query + status: "placed" # [String] Status value that needs to be considered for query } begin diff --git a/samples/client/petstore/ruby/spec/models/Category_spec.rb b/samples/client/petstore/ruby/spec/models/category_spec.rb similarity index 100% rename from samples/client/petstore/ruby/spec/models/Category_spec.rb rename to samples/client/petstore/ruby/spec/models/category_spec.rb diff --git a/samples/client/petstore/ruby/spec/models/Order_spec.rb b/samples/client/petstore/ruby/spec/models/order_spec.rb similarity index 100% rename from samples/client/petstore/ruby/spec/models/Order_spec.rb rename to samples/client/petstore/ruby/spec/models/order_spec.rb diff --git a/samples/client/petstore/ruby/spec/models/Pet_spec.rb b/samples/client/petstore/ruby/spec/models/pet_spec.rb similarity index 100% rename from samples/client/petstore/ruby/spec/models/Pet_spec.rb rename to samples/client/petstore/ruby/spec/models/pet_spec.rb diff --git a/samples/client/petstore/ruby/spec/models/Tag_spec.rb b/samples/client/petstore/ruby/spec/models/tag_spec.rb similarity index 100% rename from samples/client/petstore/ruby/spec/models/Tag_spec.rb rename to samples/client/petstore/ruby/spec/models/tag_spec.rb diff --git a/samples/client/petstore/ruby/spec/models/User_spec.rb b/samples/client/petstore/ruby/spec/models/user_spec.rb similarity index 100% rename from samples/client/petstore/ruby/spec/models/User_spec.rb rename to samples/client/petstore/ruby/spec/models/user_spec.rb