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 2ee227fea29..46c0f70a4b6 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 @@ -62,7 +62,7 @@ public class RubyClientCodegen extends DefaultCodegen implements CodegenConfig { typeMapping.put("array", "Array"); typeMapping.put("List", "Array"); typeMapping.put("map", "Hash"); - typeMapping.put("object", "Hash"); + typeMapping.put("object", "Object"); String baseFolder = "lib" + File.separatorChar + gemName; String swaggerFolder = baseFolder + File.separatorChar + "swagger"; diff --git a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache index 3abc7df40d7..717ce49c3d5 100644 --- a/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache +++ b/modules/swagger-codegen/src/main/resources/ruby/swagger/response.mustache @@ -49,24 +49,31 @@ module {{moduleName}} build_models data, return_type end - # Build model(s) from Hash data for array/hash values of the response. + # Walk through the given data and, when necessary, build model(s) from + # Hash data for array/hash values of the response. def build_models(data, return_type) case return_type - when /\AArray<(.+)>\z/ - sub_type = $1 - data.map {|item| build_models(item, sub_type) } - when /\AHash\\z/ - sub_type = $1 - {}.tap do |hash| - data.each {|k, v| hash[k] = build_models(v, sub_type) } - end when 'String', 'Integer', 'Float', 'BOOLEAN' # primitives, return directly data when 'DateTime' + # parse date time (expecting ISO 8601 format) DateTime.parse data + when 'Object' + # generic object, return directly + data + when /\AArray<(.+)>\z/ + # e.g. Array + sub_type = $1 + data.map {|item| build_models(item, sub_type) } + when /\AHash\\z/ + # e.g. Hash + sub_type = $1 + {}.tap do |hash| + data.each {|k, v| hash[k] = build_models(v, sub_type) } + end else - # models + # models, e.g. Pet {{moduleName}}.const_get(return_type).new.tap do |model| model.build_from_hash data end diff --git a/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb b/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb index 212f1fd15ab..53b60205a75 100644 --- a/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb +++ b/samples/client/petstore/ruby/lib/swagger_client/swagger/response.rb @@ -49,24 +49,31 @@ module SwaggerClient build_models data, return_type end - # Build model(s) from Hash data for array/hash values of the response. + # Walk through the given data and, when necessary, build model(s) from + # Hash data for array/hash values of the response. def build_models(data, return_type) case return_type - when /\AArray<(.+)>\z/ - sub_type = $1 - data.map {|item| build_models(item, sub_type) } - when /\AHash\\z/ - sub_type = $1 - {}.tap do |hash| - data.each {|k, v| hash[k] = build_models(v, sub_type) } - end when 'String', 'Integer', 'Float', 'BOOLEAN' # primitives, return directly data when 'DateTime' + # parse date time (expecting ISO 8601 format) DateTime.parse data + when 'Object' + # generic object, return directly + data + when /\AArray<(.+)>\z/ + # e.g. Array + sub_type = $1 + data.map {|item| build_models(item, sub_type) } + when /\AHash\\z/ + # e.g. Hash + sub_type = $1 + {}.tap do |hash| + data.each {|k, v| hash[k] = build_models(v, sub_type) } + end else - # models + # models, e.g. Pet SwaggerClient.const_get(return_type).new.tap do |model| model.build_from_hash data end