mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-21 16:27:06 +00:00
[Ruby][Faraday] Various improvements (#3520)
* update ruby faraday oas v2 samples * skip some default tests in faraday * add ruby faraday oas v3 client * add tests, fix url * add tests to CI * fix file upload * undo changes to ruby-client-petstore.sh * test faraday first * combine gemspec tempaltes * test ruby faraday in drone.io * use smaller image * update bundler * use official ruby image * skip bundler installation * skip autotest * install make * use different image * skip ruby tests in drone.io
This commit is contained in:
@@ -232,14 +232,14 @@ public class RubyClientCodegen extends AbstractRubyCodegen {
|
||||
supportingFiles.add(new SupportingFile("Gemfile.mustache", "", "Gemfile"));
|
||||
supportingFiles.add(new SupportingFile("rubocop.mustache", "", ".rubocop.yml"));
|
||||
supportingFiles.add(new SupportingFile("travis.mustache", "", ".travis.yml"));
|
||||
supportingFiles.add(new SupportingFile("gemspec.mustache", "", gemName + ".gemspec"));
|
||||
|
||||
if (TYPHOEUS.equals(getLibrary())) {
|
||||
supportingFiles.add(new SupportingFile("api_client.mustache", gemFolder, "api_client.rb"));
|
||||
supportingFiles.add(new SupportingFile("gemspec.mustache", "", gemName + ".gemspec"));
|
||||
supportingFiles.add(new SupportingFile("Gemfile.lock.mustache", "", "Gemfile.lock"));
|
||||
} else if (FARADAY.equals(getLibrary())) {
|
||||
supportingFiles.add(new SupportingFile("faraday_api_client.mustache", gemFolder, "api_client.rb"));
|
||||
supportingFiles.add(new SupportingFile("faraday_gemspec.mustache", "", gemName + ".gemspec"));
|
||||
additionalProperties.put("isFaraday", Boolean.TRUE);
|
||||
} else {
|
||||
throw new RuntimeException("Invalid HTTP library " + getLibrary() + ". Only faraday, typhoeus are supported.");
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ describe {{moduleName}}::ApiClient do
|
||||
end
|
||||
end
|
||||
|
||||
{{^isFaraday}}
|
||||
describe 'params_encoding in #build_request' do
|
||||
let(:config) { {{moduleName}}::Configuration.new }
|
||||
let(:api_client) { {{moduleName}}::ApiClient.new(config) }
|
||||
@@ -81,6 +82,7 @@ describe {{moduleName}}::ApiClient do
|
||||
end
|
||||
end
|
||||
|
||||
{{/isFaraday}}
|
||||
describe '#deserialize' do
|
||||
it "handles Array<Integer>" do
|
||||
api_client = {{moduleName}}::ApiClient.new
|
||||
|
||||
@@ -41,34 +41,34 @@ module {{moduleName}}
|
||||
connection = Faraday.new(:url => config.base_url) do |conn|
|
||||
conn.basic_auth(config.username, config.password)
|
||||
if opts[:header_params]["Content-Type"] == "multipart/form-data"
|
||||
conn.request :multipart
|
||||
conn.request :url_encoded
|
||||
conn.request :multipart
|
||||
conn.request :url_encoded
|
||||
end
|
||||
conn.adapter(Faraday.default_adapter)
|
||||
end
|
||||
begin
|
||||
response = connection.public_send(http_method.to_sym.downcase) do |req|
|
||||
build_request(http_method, path, req, opts)
|
||||
end
|
||||
response = connection.public_send(http_method.to_sym.downcase) do |req|
|
||||
build_request(http_method, path, req, opts)
|
||||
end
|
||||
|
||||
if @config.debugging
|
||||
@config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
|
||||
end
|
||||
if @config.debugging
|
||||
@config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
|
||||
end
|
||||
|
||||
unless response.success?
|
||||
if response.status == 0
|
||||
# Errors from libcurl will be made visible here
|
||||
fail ApiError.new(:code => 0,
|
||||
:message => response.return_message)
|
||||
else
|
||||
fail ApiError.new(:code => response.status,
|
||||
:response_headers => response.headers,
|
||||
:response_body => response.body),
|
||||
response.reason_phrase
|
||||
end
|
||||
unless response.success?
|
||||
if response.status == 0
|
||||
# Errors from libcurl will be made visible here
|
||||
fail ApiError.new(:code => 0,
|
||||
:message => response.return_message)
|
||||
else
|
||||
fail ApiError.new(:code => response.status,
|
||||
:response_headers => response.headers,
|
||||
:response_body => response.body),
|
||||
response.reason_phrase
|
||||
end
|
||||
end
|
||||
rescue Faraday::TimeoutError
|
||||
fail ApiError.new('Connection timed out')
|
||||
fail ApiError.new('Connection timed out')
|
||||
end
|
||||
|
||||
if opts[:return_type]
|
||||
@@ -126,7 +126,7 @@ module {{moduleName}}
|
||||
end
|
||||
request.headers = header_params
|
||||
request.body = req_body
|
||||
request.url path
|
||||
request.url url
|
||||
request.params = query_params
|
||||
download_file(request) if opts[:return_type] == 'File'
|
||||
request
|
||||
@@ -277,13 +277,15 @@ module {{moduleName}}
|
||||
# @return [String] HTTP body data in the form of string
|
||||
def build_request_body(header_params, form_params, body)
|
||||
# http form
|
||||
if header_params['Content-Type'] == 'application/x-www-form-urlencoded' ||
|
||||
header_params['Content-Type'] == 'multipart/form-data'
|
||||
if header_params['Content-Type'] == 'application/x-www-form-urlencoded'
|
||||
data = URI.encode_www_form(form_params)
|
||||
elsif header_params['Content-Type'] == 'multipart/form-data'
|
||||
data = {}
|
||||
form_params.each do |key, value|
|
||||
case value
|
||||
when ::File, ::Tempfile
|
||||
data[key] = Faraday::UploadIO.new(value.path, '')
|
||||
# TODO hardcode to application/octet-stream, need better way to detect content type
|
||||
data[key] = Faraday::UploadIO.new(value.path, 'application/octet-stream', value.path)
|
||||
when ::Array, nil
|
||||
# let Faraday handle Array and nil parameters
|
||||
data[key] = value
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
=begin
|
||||
{{> api_info}}
|
||||
=end
|
||||
|
||||
$:.push File.expand_path("../lib", __FILE__)
|
||||
require "{{gemName}}/version"
|
||||
|
||||
Gem::Specification.new do |s|
|
||||
s.name = "{{gemName}}{{^gemName}}{{{appName}}}{{/gemName}}"
|
||||
s.version = {{moduleName}}::VERSION
|
||||
s.platform = Gem::Platform::RUBY
|
||||
s.authors = ["{{gemAuthor}}{{^gemAuthor}}OpenAPI-Generator{{/gemAuthor}}"]
|
||||
s.email = ["{{gemAuthorEmail}}{{^gemAuthorEmail}}{{infoEmail}}{{/gemAuthorEmail}}"]
|
||||
s.homepage = "{{gemHomepage}}{{^gemHomepage}}https://openapi-generator.tech{{/gemHomepage}}"
|
||||
s.summary = "{{gemSummary}}{{^gemSummary}}{{{appName}}} Ruby Gem{{/gemSummary}}"
|
||||
s.description = "{{gemDescription}}{{^gemDescription}}{{{appDescription}}}{{^appDescription}}{{{appName}}} Ruby Gem{{/appDescription}}{{/gemDescription}}"
|
||||
{{#gemLicense}}
|
||||
s.license = '{{{gemLicense}}}'
|
||||
{{/gemLicense}}
|
||||
{{^gemLicense}}
|
||||
s.license = "Unlicense"
|
||||
{{/gemLicense}}
|
||||
s.required_ruby_version = "{{{gemRequiredRubyVersion}}}{{^gemRequiredRubyVersion}}>= 1.9{{/gemRequiredRubyVersion}}"
|
||||
|
||||
s.add_runtime_dependency 'faraday', '>= 0.14.0'
|
||||
s.add_runtime_dependency 'json', '~> 2.1', '>= 2.1.0'
|
||||
|
||||
s.add_development_dependency 'rspec', '~> 3.6', '>= 3.6.0'
|
||||
s.add_development_dependency 'vcr', '~> 3.0', '>= 3.0.1'
|
||||
s.add_development_dependency 'webmock', '~> 1.24', '>= 1.24.3'
|
||||
|
||||
s.files = `find *`.split("\n").uniq.sort.select { |f| !f.empty? }
|
||||
s.test_files = `find spec/*`.split("\n")
|
||||
s.executables = []
|
||||
s.require_paths = ["lib"]
|
||||
end
|
||||
@@ -24,7 +24,12 @@ Gem::Specification.new do |s|
|
||||
{{/gemLicense}}
|
||||
s.required_ruby_version = "{{{gemRequiredRubyVersion}}}{{^gemRequiredRubyVersion}}>= 1.9{{/gemRequiredRubyVersion}}"
|
||||
|
||||
{{#isFaraday}}
|
||||
s.add_runtime_dependency 'faraday', '>= 0.14.0'
|
||||
{{/isFaraday}}
|
||||
{{^isFaraday}}
|
||||
s.add_runtime_dependency 'typhoeus', '~> 1.0', '>= 1.0.1'
|
||||
{{/isFaraday}}
|
||||
s.add_runtime_dependency 'json', '~> 2.1', '>= 2.1.0'
|
||||
|
||||
s.add_development_dependency 'rspec', '~> 3.6', '>= 3.6.0'
|
||||
|
||||
Reference in New Issue
Block a user