forked from loafle/openapi-generator-original
[Ruby] Enhance Faraday middleware support (#12873)
This commit is contained in:
@@ -111,9 +111,7 @@ module {{moduleName}}
|
||||
@ssl_ca_file = nil
|
||||
@ssl_client_cert = nil
|
||||
@ssl_client_key = nil
|
||||
@middlewares = []
|
||||
@request_middlewares = []
|
||||
@response_middlewares = []
|
||||
@middlewares = Hash.new { |h, k| h[k] = [] }
|
||||
@timeout = 60
|
||||
# return data as binary instead of file
|
||||
@return_binary_data = false
|
||||
@@ -350,31 +348,56 @@ module {{moduleName}}
|
||||
{{#isFaraday}}
|
||||
# Adds middleware to the stack
|
||||
def use(*middleware)
|
||||
@middlewares << middleware
|
||||
set_faraday_middleware(:use, *middleware)
|
||||
end
|
||||
|
||||
# Adds request middleware to the stack
|
||||
def request(*middleware)
|
||||
@request_middlewares << middleware
|
||||
set_faraday_middleware(:request, *middleware)
|
||||
end
|
||||
|
||||
# Adds response middleware to the stack
|
||||
def response(*middleware)
|
||||
@response_middlewares << middleware
|
||||
set_faraday_middleware(:response, *middleware)
|
||||
end
|
||||
|
||||
# Adds Faraday middleware setting information to the stack
|
||||
#
|
||||
# @example Use the `set_faraday_middleware` method to set middleware information
|
||||
# config.set_faraday_middleware(:request, :retry, max: 3, methods: [:get, :post], retry_statuses: [503])
|
||||
# config.set_faraday_middleware(:response, :logger, nil, { bodies: true, log_level: :debug })
|
||||
# config.set_faraday_middleware(:use, Faraday::HttpCache, store: Rails.cache, shared_cache: false)
|
||||
# config.set_faraday_middleware(:insert, 0, FaradayMiddleware::FollowRedirects, { standards_compliant: true, limit: 1 })
|
||||
# config.set_faraday_middleware(:swap, 0, Faraday::Response::Logger)
|
||||
# config.set_faraday_middleware(:delete, Faraday::Multipart::Middleware)
|
||||
#
|
||||
# @see https://github.com/lostisland/faraday/blob/v2.3.0/lib/faraday/rack_builder.rb#L92-L143
|
||||
def set_faraday_middleware(operation, key, *args, &block)
|
||||
unless [:request, :response, :use, :insert, :insert_before, :insert_after, :swap, :delete].include?(operation)
|
||||
fail ArgumentError, "Invalid faraday middleware operation #{operation}. Must be" \
|
||||
" :request, :response, :use, :insert, :insert_before, :insert_after, :swap or :delete."
|
||||
end
|
||||
|
||||
@middlewares[operation] << [key, args, block]
|
||||
end
|
||||
ruby2_keywords(:set_faraday_middleware) if respond_to?(:ruby2_keywords, true)
|
||||
|
||||
# Set up middleware on the connection
|
||||
def configure_middleware(connection)
|
||||
@middlewares.each do |middleware|
|
||||
connection.use(*middleware)
|
||||
return if @middlewares.empty?
|
||||
|
||||
[:request, :response, :use, :insert, :insert_before, :insert_after, :swap].each do |operation|
|
||||
next unless @middlewares.key?(operation)
|
||||
|
||||
@middlewares[operation].each do |key, args, block|
|
||||
connection.builder.send(operation, key, *args, &block)
|
||||
end
|
||||
end
|
||||
|
||||
@request_middlewares.each do |middleware|
|
||||
connection.request(*middleware)
|
||||
end
|
||||
|
||||
@response_middlewares.each do |middleware|
|
||||
connection.response(*middleware)
|
||||
if @middlewares.key?(:delete)
|
||||
@middlewares[:delete].each do |key, _args, _block|
|
||||
connection.builder.delete(key)
|
||||
end
|
||||
end
|
||||
end
|
||||
{{/isFaraday}}
|
||||
|
||||
@@ -153,9 +153,7 @@ module Petstore
|
||||
@ssl_ca_file = nil
|
||||
@ssl_client_cert = nil
|
||||
@ssl_client_key = nil
|
||||
@middlewares = []
|
||||
@request_middlewares = []
|
||||
@response_middlewares = []
|
||||
@middlewares = Hash.new { |h, k| h[k] = [] }
|
||||
@timeout = 60
|
||||
# return data as binary instead of file
|
||||
@return_binary_data = false
|
||||
@@ -368,31 +366,56 @@ module Petstore
|
||||
|
||||
# Adds middleware to the stack
|
||||
def use(*middleware)
|
||||
@middlewares << middleware
|
||||
set_faraday_middleware(:use, *middleware)
|
||||
end
|
||||
|
||||
# Adds request middleware to the stack
|
||||
def request(*middleware)
|
||||
@request_middlewares << middleware
|
||||
set_faraday_middleware(:request, *middleware)
|
||||
end
|
||||
|
||||
# Adds response middleware to the stack
|
||||
def response(*middleware)
|
||||
@response_middlewares << middleware
|
||||
set_faraday_middleware(:response, *middleware)
|
||||
end
|
||||
|
||||
# Adds Faraday middleware setting information to the stack
|
||||
#
|
||||
# @example Use the `set_faraday_middleware` method to set middleware information
|
||||
# config.set_faraday_middleware(:request, :retry, max: 3, methods: [:get, :post], retry_statuses: [503])
|
||||
# config.set_faraday_middleware(:response, :logger, nil, { bodies: true, log_level: :debug })
|
||||
# config.set_faraday_middleware(:use, Faraday::HttpCache, store: Rails.cache, shared_cache: false)
|
||||
# config.set_faraday_middleware(:insert, 0, FaradayMiddleware::FollowRedirects, { standards_compliant: true, limit: 1 })
|
||||
# config.set_faraday_middleware(:swap, 0, Faraday::Response::Logger)
|
||||
# config.set_faraday_middleware(:delete, Faraday::Multipart::Middleware)
|
||||
#
|
||||
# @see https://github.com/lostisland/faraday/blob/v2.3.0/lib/faraday/rack_builder.rb#L92-L143
|
||||
def set_faraday_middleware(operation, key, *args, &block)
|
||||
unless [:request, :response, :use, :insert, :insert_before, :insert_after, :swap, :delete].include?(operation)
|
||||
fail ArgumentError, "Invalid faraday middleware operation #{operation}. Must be" \
|
||||
" :request, :response, :use, :insert, :insert_before, :insert_after, :swap or :delete."
|
||||
end
|
||||
|
||||
@middlewares[operation] << [key, args, block]
|
||||
end
|
||||
ruby2_keywords(:set_faraday_middleware) if respond_to?(:ruby2_keywords, true)
|
||||
|
||||
# Set up middleware on the connection
|
||||
def configure_middleware(connection)
|
||||
@middlewares.each do |middleware|
|
||||
connection.use(*middleware)
|
||||
return if @middlewares.empty?
|
||||
|
||||
[:request, :response, :use, :insert, :insert_before, :insert_after, :swap].each do |operation|
|
||||
next unless @middlewares.key?(operation)
|
||||
|
||||
@middlewares[operation].each do |key, args, block|
|
||||
connection.builder.send(operation, key, *args, &block)
|
||||
end
|
||||
end
|
||||
|
||||
@request_middlewares.each do |middleware|
|
||||
connection.request(*middleware)
|
||||
end
|
||||
|
||||
@response_middlewares.each do |middleware|
|
||||
connection.response(*middleware)
|
||||
if @middlewares.key?(:delete)
|
||||
@middlewares[:delete].each do |key, _args, _block|
|
||||
connection.builder.delete(key)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user