diff --git a/modules/openapi-generator/src/main/resources/ruby-client/api_client.mustache b/modules/openapi-generator/src/main/resources/ruby-client/api_client.mustache
index 7449326209c..fd043cd31f9 100644
--- a/modules/openapi-generator/src/main/resources/ruby-client/api_client.mustache
+++ b/modules/openapi-generator/src/main/resources/ruby-client/api_client.mustache
@@ -66,7 +66,20 @@ module {{moduleName}}
# handle file downloading - return the File instance processed in request callbacks
# note that response body is empty when the file is written in chunks in request on_body callback
+ {{^isFaraday}}
return @tempfile if return_type == 'File'
+ {{/isFaraday}}
+ {{#isFaraday}}
+ if return_type == 'File'
+ @tempfile.write(@stream)
+ @tempfile.close
+ @config.logger.info "Temp file written to #{@tempfile.path}, please copy the file to a proper folder "\
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
+ "explicitly with `tempfile.delete`"
+ return @tempfile
+ end
+ {{/isFaraday}}
return nil if body.nil? || body.empty?
@@ -131,44 +144,6 @@ module {{moduleName}}
end
end
- # Save response body into a file in (the defined) temporary folder, using the filename
- # from the "Content-Disposition" header if provided, otherwise a random filename.
- # The response body is written to the file in chunks in order to handle files which
- # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
- # process can use.
- #
- # @see Configuration#temp_folder_path
- def download_file(request)
- tempfile = nil
- encoding = nil
- request.on_headers do |response|
- content_disposition = response.headers['Content-Disposition']
- if content_disposition && content_disposition =~ /filename=/i
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
- prefix = sanitize_filename(filename)
- else
- prefix = 'download-'
- end
- prefix = prefix + '-' unless prefix.end_with?('-')
- encoding = response.body.encoding
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
- @tempfile = tempfile
- end
- request.on_body do |chunk|
- chunk.force_encoding(encoding)
- tempfile.write(chunk)
- end
- request.on_complete do |response|
- if tempfile
- tempfile.close
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
- "explicitly with `tempfile.delete`"
- end
- end
- end
-
# Sanitize filename by removing path.
# e.g. ../../sun.gif becomes sun.gif
#
diff --git a/modules/openapi-generator/src/main/resources/ruby-client/api_client_faraday_partial.mustache b/modules/openapi-generator/src/main/resources/ruby-client/api_client_faraday_partial.mustache
index 9675d997c9d..e4fce575857 100644
--- a/modules/openapi-generator/src/main/resources/ruby-client/api_client_faraday_partial.mustache
+++ b/modules/openapi-generator/src/main/resources/ruby-client/api_client_faraday_partial.mustache
@@ -127,3 +127,41 @@
end
data
end
+
+ # Save response body into a file in (the defined) temporary folder, using the filename
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
+ # The response body is written to the file in chunks in order to handle files which
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
+ # process can use.
+ #
+ # @see Configuration#temp_folder_path
+ def download_file(request)
+ tempfile = nil
+ encoding = nil
+ request.headers do |response|
+ content_disposition = response.headers['Content-Disposition']
+ if content_disposition && content_disposition =~ /filename=/i
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
+ prefix = sanitize_filename(filename)
+ else
+ prefix = 'download-'
+ end
+ prefix = prefix + '-' unless prefix.end_with?('-')
+ encoding = response.body.encoding
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
+ @tempfile = tempfile
+ end
+
+ if tempfile.nil?
+ tempfile = Tempfile.open('download-', @config.temp_folder_path)
+ @tempfile = tempfile
+ end
+
+ @stream = []
+
+ # handle streaming Responses
+ request.options.on_data = Proc.new do |chunk, overall_received_bytes|
+ @stream << chunk
+ end
+
+ end
diff --git a/modules/openapi-generator/src/main/resources/ruby-client/api_client_typhoeus_partial.mustache b/modules/openapi-generator/src/main/resources/ruby-client/api_client_typhoeus_partial.mustache
index 140f7f9a9bc..e0c9e7cc1d6 100644
--- a/modules/openapi-generator/src/main/resources/ruby-client/api_client_typhoeus_partial.mustache
+++ b/modules/openapi-generator/src/main/resources/ruby-client/api_client_typhoeus_partial.mustache
@@ -113,3 +113,41 @@
end
data
end
+
+ # Save response body into a file in (the defined) temporary folder, using the filename
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
+ # The response body is written to the file in chunks in order to handle files which
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
+ # process can use.
+ #
+ # @see Configuration#temp_folder_path
+ def download_file(request)
+ tempfile = nil
+ encoding = nil
+ request.on_headers do |response|
+ content_disposition = response.headers['Content-Disposition']
+ if content_disposition && content_disposition =~ /filename=/i
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
+ prefix = sanitize_filename(filename)
+ else
+ prefix = 'download-'
+ end
+ prefix = prefix + '-' unless prefix.end_with?('-')
+ encoding = response.body.encoding
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
+ @tempfile = tempfile
+ end
+ request.on_body do |chunk|
+ chunk.force_encoding(encoding)
+ tempfile.write(chunk)
+ end
+ request.on_complete do |response|
+ if tempfile
+ tempfile.close
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
+ "explicitly with `tempfile.delete`"
+ end
+ end
+ end
diff --git a/pom.xml b/pom.xml
index fb86667b54e..0368bef1844 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1192,6 +1192,7 @@
+ samples/client/petstore/ruby-faraday
samples/client/petstore/ruby
samples/client/petstore/c
samples/client/petstore/cpp-qt5
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb
index 779b5914841..62171226438 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb
@@ -172,6 +172,44 @@ module Petstore
data
end
+ # Save response body into a file in (the defined) temporary folder, using the filename
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
+ # The response body is written to the file in chunks in order to handle files which
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
+ # process can use.
+ #
+ # @see Configuration#temp_folder_path
+ def download_file(request)
+ tempfile = nil
+ encoding = nil
+ request.headers do |response|
+ content_disposition = response.headers['Content-Disposition']
+ if content_disposition && content_disposition =~ /filename=/i
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
+ prefix = sanitize_filename(filename)
+ else
+ prefix = 'download-'
+ end
+ prefix = prefix + '-' unless prefix.end_with?('-')
+ encoding = response.body.encoding
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
+ @tempfile = tempfile
+ end
+
+ if tempfile.nil?
+ tempfile = Tempfile.open('download-', @config.temp_folder_path)
+ @tempfile = tempfile
+ end
+
+ @stream = []
+
+ # handle streaming Responses
+ request.options.on_data = Proc.new do |chunk, overall_received_bytes|
+ @stream << chunk
+ end
+
+ end
+
# Check if the given MIME is a JSON MIME.
# JSON MIME examples:
# application/json
@@ -193,7 +231,15 @@ module Petstore
# handle file downloading - return the File instance processed in request callbacks
# note that response body is empty when the file is written in chunks in request on_body callback
- return @tempfile if return_type == 'File'
+ if return_type == 'File'
+ @tempfile.write(@stream)
+ @tempfile.close
+ @config.logger.info "Temp file written to #{@tempfile.path}, please copy the file to a proper folder "\
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
+ "explicitly with `tempfile.delete`"
+ return @tempfile
+ end
return nil if body.nil? || body.empty?
@@ -258,44 +304,6 @@ module Petstore
end
end
- # Save response body into a file in (the defined) temporary folder, using the filename
- # from the "Content-Disposition" header if provided, otherwise a random filename.
- # The response body is written to the file in chunks in order to handle files which
- # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
- # process can use.
- #
- # @see Configuration#temp_folder_path
- def download_file(request)
- tempfile = nil
- encoding = nil
- request.on_headers do |response|
- content_disposition = response.headers['Content-Disposition']
- if content_disposition && content_disposition =~ /filename=/i
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
- prefix = sanitize_filename(filename)
- else
- prefix = 'download-'
- end
- prefix = prefix + '-' unless prefix.end_with?('-')
- encoding = response.body.encoding
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
- @tempfile = tempfile
- end
- request.on_body do |chunk|
- chunk.force_encoding(encoding)
- tempfile.write(chunk)
- end
- request.on_complete do |response|
- if tempfile
- tempfile.close
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
- "explicitly with `tempfile.delete`"
- end
- end
- end
-
# Sanitize filename by removing path.
# e.g. ../../sun.gif becomes sun.gif
#
diff --git a/samples/client/petstore/ruby/lib/petstore/api_client.rb b/samples/client/petstore/ruby/lib/petstore/api_client.rb
index 20c77a76891..57b1436f535 100644
--- a/samples/client/petstore/ruby/lib/petstore/api_client.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api_client.rb
@@ -156,6 +156,44 @@ module Petstore
data
end
+ # Save response body into a file in (the defined) temporary folder, using the filename
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
+ # The response body is written to the file in chunks in order to handle files which
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
+ # process can use.
+ #
+ # @see Configuration#temp_folder_path
+ def download_file(request)
+ tempfile = nil
+ encoding = nil
+ request.on_headers do |response|
+ content_disposition = response.headers['Content-Disposition']
+ if content_disposition && content_disposition =~ /filename=/i
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
+ prefix = sanitize_filename(filename)
+ else
+ prefix = 'download-'
+ end
+ prefix = prefix + '-' unless prefix.end_with?('-')
+ encoding = response.body.encoding
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
+ @tempfile = tempfile
+ end
+ request.on_body do |chunk|
+ chunk.force_encoding(encoding)
+ tempfile.write(chunk)
+ end
+ request.on_complete do |response|
+ if tempfile
+ tempfile.close
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
+ "explicitly with `tempfile.delete`"
+ end
+ end
+ end
+
# Check if the given MIME is a JSON MIME.
# JSON MIME examples:
# application/json
@@ -242,44 +280,6 @@ module Petstore
end
end
- # Save response body into a file in (the defined) temporary folder, using the filename
- # from the "Content-Disposition" header if provided, otherwise a random filename.
- # The response body is written to the file in chunks in order to handle files which
- # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
- # process can use.
- #
- # @see Configuration#temp_folder_path
- def download_file(request)
- tempfile = nil
- encoding = nil
- request.on_headers do |response|
- content_disposition = response.headers['Content-Disposition']
- if content_disposition && content_disposition =~ /filename=/i
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
- prefix = sanitize_filename(filename)
- else
- prefix = 'download-'
- end
- prefix = prefix + '-' unless prefix.end_with?('-')
- encoding = response.body.encoding
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
- @tempfile = tempfile
- end
- request.on_body do |chunk|
- chunk.force_encoding(encoding)
- tempfile.write(chunk)
- end
- request.on_complete do |response|
- if tempfile
- tempfile.close
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
- "explicitly with `tempfile.delete`"
- end
- end
- end
-
# Sanitize filename by removing path.
# e.g. ../../sun.gif becomes sun.gif
#
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb
index b0f380430bd..f8765e494a1 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb
@@ -155,6 +155,44 @@ module DynamicServers
data
end
+ # Save response body into a file in (the defined) temporary folder, using the filename
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
+ # The response body is written to the file in chunks in order to handle files which
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
+ # process can use.
+ #
+ # @see Configuration#temp_folder_path
+ def download_file(request)
+ tempfile = nil
+ encoding = nil
+ request.on_headers do |response|
+ content_disposition = response.headers['Content-Disposition']
+ if content_disposition && content_disposition =~ /filename=/i
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
+ prefix = sanitize_filename(filename)
+ else
+ prefix = 'download-'
+ end
+ prefix = prefix + '-' unless prefix.end_with?('-')
+ encoding = response.body.encoding
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
+ @tempfile = tempfile
+ end
+ request.on_body do |chunk|
+ chunk.force_encoding(encoding)
+ tempfile.write(chunk)
+ end
+ request.on_complete do |response|
+ if tempfile
+ tempfile.close
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
+ "explicitly with `tempfile.delete`"
+ end
+ end
+ end
+
# Check if the given MIME is a JSON MIME.
# JSON MIME examples:
# application/json
@@ -241,44 +279,6 @@ module DynamicServers
end
end
- # Save response body into a file in (the defined) temporary folder, using the filename
- # from the "Content-Disposition" header if provided, otherwise a random filename.
- # The response body is written to the file in chunks in order to handle files which
- # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
- # process can use.
- #
- # @see Configuration#temp_folder_path
- def download_file(request)
- tempfile = nil
- encoding = nil
- request.on_headers do |response|
- content_disposition = response.headers['Content-Disposition']
- if content_disposition && content_disposition =~ /filename=/i
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
- prefix = sanitize_filename(filename)
- else
- prefix = 'download-'
- end
- prefix = prefix + '-' unless prefix.end_with?('-')
- encoding = response.body.encoding
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
- @tempfile = tempfile
- end
- request.on_body do |chunk|
- chunk.force_encoding(encoding)
- tempfile.write(chunk)
- end
- request.on_complete do |response|
- if tempfile
- tempfile.close
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
- "explicitly with `tempfile.delete`"
- end
- end
- end
-
# Sanitize filename by removing path.
# e.g. ../../sun.gif becomes sun.gif
#
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb
index 86da2fc004e..4b280426e31 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb
@@ -155,6 +155,44 @@ module Petstore
data
end
+ # Save response body into a file in (the defined) temporary folder, using the filename
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
+ # The response body is written to the file in chunks in order to handle files which
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
+ # process can use.
+ #
+ # @see Configuration#temp_folder_path
+ def download_file(request)
+ tempfile = nil
+ encoding = nil
+ request.on_headers do |response|
+ content_disposition = response.headers['Content-Disposition']
+ if content_disposition && content_disposition =~ /filename=/i
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
+ prefix = sanitize_filename(filename)
+ else
+ prefix = 'download-'
+ end
+ prefix = prefix + '-' unless prefix.end_with?('-')
+ encoding = response.body.encoding
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
+ @tempfile = tempfile
+ end
+ request.on_body do |chunk|
+ chunk.force_encoding(encoding)
+ tempfile.write(chunk)
+ end
+ request.on_complete do |response|
+ if tempfile
+ tempfile.close
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
+ "explicitly with `tempfile.delete`"
+ end
+ end
+ end
+
# Check if the given MIME is a JSON MIME.
# JSON MIME examples:
# application/json
@@ -241,44 +279,6 @@ module Petstore
end
end
- # Save response body into a file in (the defined) temporary folder, using the filename
- # from the "Content-Disposition" header if provided, otherwise a random filename.
- # The response body is written to the file in chunks in order to handle files which
- # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
- # process can use.
- #
- # @see Configuration#temp_folder_path
- def download_file(request)
- tempfile = nil
- encoding = nil
- request.on_headers do |response|
- content_disposition = response.headers['Content-Disposition']
- if content_disposition && content_disposition =~ /filename=/i
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
- prefix = sanitize_filename(filename)
- else
- prefix = 'download-'
- end
- prefix = prefix + '-' unless prefix.end_with?('-')
- encoding = response.body.encoding
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
- @tempfile = tempfile
- end
- request.on_body do |chunk|
- chunk.force_encoding(encoding)
- tempfile.write(chunk)
- end
- request.on_complete do |response|
- if tempfile
- tempfile.close
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
- "explicitly with `tempfile.delete`"
- end
- end
- end
-
# Sanitize filename by removing path.
# e.g. ../../sun.gif becomes sun.gif
#