forked from loafle/openapi-generator-original
Add "servers" support to Ruby API client (#1280)
* update ruby samples with OAS3 spec * add server support to ruby api client * minor format change * minor format fix, skip form models * better exception and add test for invaid value * remove exception test code
This commit is contained in:
parent
2b88a1d26f
commit
a55533c178
@ -27,6 +27,6 @@ fi
|
||||
|
||||
# if you've executed sbt assembly previously it will use that instead.
|
||||
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
|
||||
ags="generate -t modules/openapi-generator/src/main/resources/ruby-client -i modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml -g ruby -c bin/ruby-petstore.json -o samples/client/petstore/ruby $@"
|
||||
ags="generate -t modules/openapi-generator/src/main/resources/ruby-client -i modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml -g ruby -c bin/ruby-petstore.json -o samples/client/petstore/ruby -DskipFormModel=true $@"
|
||||
|
||||
java $JAVA_OPTS -jar $executable $ags
|
||||
|
@ -10,7 +10,7 @@ echo "Please press CTRL+C to stop or the script will continue in 5 seconds."
|
||||
sleep 5
|
||||
|
||||
# LIST OF SCRIPTS:
|
||||
./bin/ruby-client-petstore.sh > /dev/null 2>&1
|
||||
./bin/openapi3/ruby-client-petstore.sh > /dev/null 2>&1
|
||||
./bin/java-petstore-all.sh > /dev/null 2>&1
|
||||
./bin/java-jaxrs-petstore-server-all.sh > /dev/null 2>&1
|
||||
./bin/spring-all-pestore.sh > /dev/null 2>&1
|
||||
|
@ -168,7 +168,7 @@ public class URLPathUtils {
|
||||
*/
|
||||
public static String getHost(OpenAPI openAPI) {
|
||||
if (openAPI.getServers() != null && openAPI.getServers().size() > 0) {
|
||||
return sanitizeUrl(openAPI.getServers().get(0).getUrl());
|
||||
return sanitizeUrl(getServerURL(openAPI.getServers().get(0)).toString());
|
||||
}
|
||||
return LOCAL_HOST;
|
||||
}
|
||||
|
@ -219,5 +219,70 @@ module {{moduleName}}
|
||||
{{/authMethods}}
|
||||
}
|
||||
end
|
||||
|
||||
# Returns an array of Server setting
|
||||
def server_settings
|
||||
[
|
||||
{{#servers}}
|
||||
{
|
||||
url: "{{{url}}}",
|
||||
description: "{{{description}}}{{^description}}No descriptoin provided{{/description}}",
|
||||
{{#variables}}
|
||||
{{#-first}}
|
||||
variables: {
|
||||
{{/-first}}
|
||||
{{{name}}}: {
|
||||
description: "{{{description}}}{{^description}}No descriptoin provided{{/description}}",
|
||||
default_value: "{{{defaultValue}}}",
|
||||
{{#enumValues}}
|
||||
{{#-first}}
|
||||
enum_values: [
|
||||
{{/-first}}
|
||||
"{{{.}}}"{{^-last}},{{/-last}}
|
||||
{{#-last}}
|
||||
]
|
||||
{{/-last}}
|
||||
{{/enumValues}}
|
||||
}{{^-last}},{{/-last}}
|
||||
{{#-last}}
|
||||
}
|
||||
{{/-last}}
|
||||
{{/variables}}
|
||||
}{{^-last}},{{/-last}}
|
||||
{{/servers}}
|
||||
]
|
||||
end
|
||||
|
||||
# Returns URL based on server settings
|
||||
#
|
||||
# @param index array index of the server settings
|
||||
# @param variables hash of variable and the corresponding value
|
||||
def server_url(index, variables = {})
|
||||
servers = server_settings
|
||||
|
||||
# check array index out of bound
|
||||
if (index < 0 || index > servers.size)
|
||||
fail ArgumentError "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
|
||||
end
|
||||
|
||||
server = servers[index]
|
||||
url = server[:url]
|
||||
|
||||
# go through variable and assign a value
|
||||
server[:variables].each do |name, variable|
|
||||
if variables.key?(name)
|
||||
if (server[:variables][name][:enum_values].include? variables[name])
|
||||
url.gsub! "{" + name.to_s + "}", variables[name]
|
||||
else
|
||||
fail ArgumentError, "The variable `#{name}` in the server URL has invalid value #{variables[name]}. Must be #{server[:variables][name][:enum_values]}."
|
||||
end
|
||||
else
|
||||
# use default value
|
||||
url.gsub! "{" + name.to_s + "}", server[:variables][name][:default_value]
|
||||
end
|
||||
end
|
||||
|
||||
url
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -968,7 +968,28 @@ paths:
|
||||
required:
|
||||
- requiredFile
|
||||
servers:
|
||||
- url: 'http://petstore.swagger.io:80/v2'
|
||||
- url: 'http://{server}.swagger.io:{port}/v2'
|
||||
description: petstore server
|
||||
variables:
|
||||
server:
|
||||
enum:
|
||||
- 'petstore'
|
||||
- 'qa-petstore'
|
||||
- 'dev-petstore'
|
||||
default: 'petstore'
|
||||
port:
|
||||
enum:
|
||||
- 80
|
||||
- 8080
|
||||
default: 80
|
||||
- url: https://api.gigantic-server.com:8080/{version}
|
||||
description: The production API server
|
||||
variables:
|
||||
version:
|
||||
enum:
|
||||
- 'v1'
|
||||
- 'v2'
|
||||
default: 'v2'
|
||||
components:
|
||||
requestBodies:
|
||||
UserArray:
|
||||
|
@ -58,7 +58,7 @@ No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Content-Type**: application/json
|
||||
- **Accept**: */*
|
||||
|
||||
|
||||
@ -104,7 +104,7 @@ No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Content-Type**: application/json
|
||||
- **Accept**: */*
|
||||
|
||||
|
||||
@ -150,7 +150,7 @@ No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Content-Type**: application/json
|
||||
- **Accept**: */*
|
||||
|
||||
|
||||
@ -196,7 +196,7 @@ No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Content-Type**: application/json
|
||||
- **Accept**: */*
|
||||
|
||||
|
||||
|
@ -185,7 +185,7 @@ No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Content-Type**: application/json
|
||||
- **Accept**: application/xml, application/json
|
||||
|
||||
|
||||
|
@ -53,7 +53,7 @@ No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Content-Type**: application/json
|
||||
- **Accept**: Not defined
|
||||
|
||||
|
||||
@ -95,7 +95,7 @@ No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Content-Type**: application/json
|
||||
- **Accept**: Not defined
|
||||
|
||||
|
||||
@ -137,7 +137,7 @@ No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Content-Type**: application/json
|
||||
- **Accept**: Not defined
|
||||
|
||||
|
||||
@ -353,7 +353,7 @@ No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Content-Type**: application/json
|
||||
- **Accept**: Not defined
|
||||
|
||||
|
||||
|
@ -46,6 +46,8 @@ module Petstore
|
||||
header_params = {}
|
||||
# HTTP header 'Accept' (if needed)
|
||||
header_params['Accept'] = @api_client.select_header_accept(['*/*'])
|
||||
# HTTP header 'Content-Type'
|
||||
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
|
||||
|
||||
# form parameters
|
||||
form_params = {}
|
||||
@ -93,6 +95,8 @@ module Petstore
|
||||
header_params = {}
|
||||
# HTTP header 'Accept' (if needed)
|
||||
header_params['Accept'] = @api_client.select_header_accept(['*/*'])
|
||||
# HTTP header 'Content-Type'
|
||||
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
|
||||
|
||||
# form parameters
|
||||
form_params = {}
|
||||
@ -140,6 +144,8 @@ module Petstore
|
||||
header_params = {}
|
||||
# HTTP header 'Accept' (if needed)
|
||||
header_params['Accept'] = @api_client.select_header_accept(['*/*'])
|
||||
# HTTP header 'Content-Type'
|
||||
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
|
||||
|
||||
# form parameters
|
||||
form_params = {}
|
||||
@ -187,6 +193,8 @@ module Petstore
|
||||
header_params = {}
|
||||
# HTTP header 'Accept' (if needed)
|
||||
header_params['Accept'] = @api_client.select_header_accept(['*/*'])
|
||||
# HTTP header 'Content-Type'
|
||||
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
|
||||
|
||||
# form parameters
|
||||
form_params = {}
|
||||
@ -585,7 +593,7 @@ module Petstore
|
||||
|
||||
# query parameters
|
||||
query_params = {}
|
||||
query_params[:'enum_query_string_array'] = @api_client.build_collection_param(opts[:'enum_query_string_array'], :csv) if !opts[:'enum_query_string_array'].nil?
|
||||
query_params[:'enum_query_string_array'] = @api_client.build_collection_param(opts[:'enum_query_string_array'], :multi) if !opts[:'enum_query_string_array'].nil?
|
||||
query_params[:'enum_query_string'] = opts[:'enum_query_string'] if !opts[:'enum_query_string'].nil?
|
||||
query_params[:'enum_query_integer'] = opts[:'enum_query_integer'] if !opts[:'enum_query_integer'].nil?
|
||||
query_params[:'enum_query_double'] = opts[:'enum_query_double'] if !opts[:'enum_query_double'].nil?
|
||||
|
@ -208,6 +208,8 @@ module Petstore
|
||||
header_params = {}
|
||||
# HTTP header 'Accept' (if needed)
|
||||
header_params['Accept'] = @api_client.select_header_accept(['application/xml', 'application/json'])
|
||||
# HTTP header 'Content-Type'
|
||||
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
|
||||
|
||||
# form parameters
|
||||
form_params = {}
|
||||
|
@ -50,6 +50,8 @@ module Petstore
|
||||
|
||||
# header parameters
|
||||
header_params = {}
|
||||
# HTTP header 'Content-Type'
|
||||
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
|
||||
|
||||
# form parameters
|
||||
form_params = {}
|
||||
@ -98,6 +100,8 @@ module Petstore
|
||||
|
||||
# header parameters
|
||||
header_params = {}
|
||||
# HTTP header 'Content-Type'
|
||||
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
|
||||
|
||||
# form parameters
|
||||
form_params = {}
|
||||
@ -146,6 +150,8 @@ module Petstore
|
||||
|
||||
# header parameters
|
||||
header_params = {}
|
||||
# HTTP header 'Content-Type'
|
||||
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
|
||||
|
||||
# form parameters
|
||||
form_params = {}
|
||||
@ -404,6 +410,8 @@ module Petstore
|
||||
|
||||
# header parameters
|
||||
header_params = {}
|
||||
# HTTP header 'Content-Type'
|
||||
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
|
||||
|
||||
# form parameters
|
||||
form_params = {}
|
||||
|
@ -226,5 +226,80 @@ module Petstore
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
# Returns an array of Server setting
|
||||
def server_settings
|
||||
[
|
||||
{
|
||||
url: "http://{server}.swagger.io:{port}/v2",
|
||||
description: "petstore server",
|
||||
variables: {
|
||||
server: {
|
||||
description: "No descriptoin provided",
|
||||
default_value: "petstore",
|
||||
enum_values: [
|
||||
"petstore",
|
||||
"qa-petstore",
|
||||
"dev-petstore"
|
||||
]
|
||||
},
|
||||
port: {
|
||||
description: "No descriptoin provided",
|
||||
default_value: "80",
|
||||
enum_values: [
|
||||
"80",
|
||||
"8080"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
url: "https://api.gigantic-server.com:8080/{version}",
|
||||
description: "The production API server",
|
||||
variables: {
|
||||
version: {
|
||||
description: "No descriptoin provided",
|
||||
default_value: "v2",
|
||||
enum_values: [
|
||||
"v1",
|
||||
"v2"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
end
|
||||
|
||||
# Returns URL based on server settings
|
||||
#
|
||||
# @param index array index of the server settings
|
||||
# @param variables hash of variable and the corresponding value
|
||||
def server_url(index, variables = {})
|
||||
servers = server_settings
|
||||
|
||||
# check array index out of bound
|
||||
if (index < 0 || index > servers.size)
|
||||
fail ArgumentError "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
|
||||
end
|
||||
|
||||
server = servers[index]
|
||||
url = server[:url]
|
||||
|
||||
# go through variable and assign a value
|
||||
server[:variables].each do |name, variable|
|
||||
if variables.key?(name)
|
||||
if (server[:variables][name][:enum_values].include? variables[name])
|
||||
url.gsub! "{" + name.to_s + "}", variables[name]
|
||||
else
|
||||
fail ArgumentError, "The variable `#{name}` in the server URL has invalid value #{variables[name]}. Must be #{server[:variables][name][:enum_values]}."
|
||||
end
|
||||
else
|
||||
# use default value
|
||||
url.gsub! "{" + name.to_s + "}", server[:variables][name][:default_value]
|
||||
end
|
||||
end
|
||||
|
||||
url
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,12 +1,12 @@
|
||||
=begin
|
||||
#Swagger Petstore
|
||||
#OpenAPI Petstore
|
||||
|
||||
#This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
|
||||
|
||||
OpenAPI spec version: 1.0.0
|
||||
Contact: apiteam@swagger.io
|
||||
Generated by: https://github.com/swagger-api/swagger-codegen.git
|
||||
Swagger Codegen version: 3.0.0-SNAPSHOT
|
||||
|
||||
Generated by: https://openapi-generator.tech
|
||||
OpenAPI Generator version: 3.3.2-SNAPSHOT
|
||||
|
||||
=end
|
||||
|
||||
@ -29,7 +29,7 @@ module Petstore
|
||||
end
|
||||
|
||||
# Attribute type mapping.
|
||||
def self.swagger_types
|
||||
def self.openapi_types
|
||||
{
|
||||
:'param' => :'String',
|
||||
:'param2' => :'String'
|
||||
@ -102,7 +102,7 @@ module Petstore
|
||||
# @return [Object] Returns the model itself
|
||||
def build_from_hash(attributes)
|
||||
return nil unless attributes.is_a?(Hash)
|
||||
self.class.swagger_types.each_pair do |key, type|
|
||||
self.class.openapi_types.each_pair do |key, type|
|
||||
if type =~ /\AArray<(.*)>/i
|
||||
# check to ensure the input is an array given that the the attribute
|
||||
# is documented as an array but the input is not
|
||||
|
@ -195,10 +195,6 @@ module Petstore
|
||||
invalid_properties.push('invalid value for "byte", byte cannot be nil.')
|
||||
end
|
||||
|
||||
if @byte !~ Regexp.new(/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/)
|
||||
invalid_properties.push('invalid value for "byte", must conform to the pattern /^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/.')
|
||||
end
|
||||
|
||||
if @date.nil?
|
||||
invalid_properties.push('invalid value for "date", date cannot be nil.')
|
||||
end
|
||||
@ -234,7 +230,6 @@ module Petstore
|
||||
return false if !@double.nil? && @double < 67.8
|
||||
return false if !@string.nil? && @string !~ Regexp.new(/[a-z]/i)
|
||||
return false if @byte.nil?
|
||||
return false if @byte !~ Regexp.new(/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/)
|
||||
return false if @date.nil?
|
||||
return false if @password.nil?
|
||||
return false if @password.to_s.length > 64
|
||||
@ -326,20 +321,6 @@ module Petstore
|
||||
@string = string
|
||||
end
|
||||
|
||||
# Custom attribute writer method with validation
|
||||
# @param [Object] byte Value to be assigned
|
||||
def byte=(byte)
|
||||
if byte.nil?
|
||||
fail ArgumentError, 'byte cannot be nil'
|
||||
end
|
||||
|
||||
if byte !~ Regexp.new(/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/)
|
||||
fail ArgumentError, 'invalid value for "byte", must conform to the pattern /^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/.'
|
||||
end
|
||||
|
||||
@byte = byte
|
||||
end
|
||||
|
||||
# Custom attribute writer method with validation
|
||||
# @param [Object] password Value to be assigned
|
||||
def password=(password)
|
||||
|
@ -22,4 +22,34 @@ describe Petstore::Configuration do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'server settings' do
|
||||
it 'should return an array of server settings' do
|
||||
expect(config.auth_settings).not_to be_empty
|
||||
end
|
||||
|
||||
it 'should get the first url' do
|
||||
url = config.server_url(0, server: "dev-petstore", port: "8080")
|
||||
expect(url).to eq("http://dev-petstore.swagger.io:8080/v2")
|
||||
end
|
||||
|
||||
it 'should get the first url with default values' do
|
||||
url = config.server_url(0)
|
||||
expect(url).to eq("http://petstore.swagger.io:80/v2")
|
||||
end
|
||||
|
||||
it 'should get the second url with default values' do
|
||||
url = config.server_url(1)
|
||||
expect(url).to eq("https://api.gigantic-server.com:8080/v2")
|
||||
end
|
||||
|
||||
it 'should get the second url' do
|
||||
url = config.server_url(1, version: "v1")
|
||||
expect(url).to eq("https://api.gigantic-server.com:8080/v1")
|
||||
end
|
||||
|
||||
it 'should raise error due to invalid enum value' do
|
||||
expect{config.server_url(1, version: "v6")}.to raise_error(ArgumentError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user