templates/configuration.mustache in dropbox-sign-1.4.1 vs templates/configuration.mustache in dropbox-sign-1.5.0
- old
+ new
@@ -55,17 +55,35 @@
attr_accessor :password
# Defines the access token (Bearer) used with OAuth2.
attr_accessor :access_token
+ # Defines a Proc used to fetch or refresh access tokens (Bearer) used with OAuth2.
+ # Overrides the access_token if set
+ # @return [Proc]
+ attr_accessor :access_token_getter
+
+ # Set this to return data as binary instead of downloading a temp file. When enabled (set to true)
+ # HTTP responses with return type `File` will be returned as a stream of binary data.
+ # Default to false.
+ attr_accessor :return_binary_data
+
# Set this to enable/disable debugging. When enabled (set to true), HTTP request/response
# details will be logged with `logger.debug` (see the `logger` attribute).
# Default to false.
#
# @return [true, false]
attr_accessor :debugging
+ # Set this to ignore operation servers for the API client. This is useful when you need to
+ # send requests to a different server than the one specified in the OpenAPI document.
+ # Will default to the base url defined in the spec but can be overridden by setting
+ # `scheme`, `host`, `base_path` directly.
+ # Default to false.
+ # @return [true, false]
+ attr_accessor :ignore_operation_servers
+
# Defines the logger used for debugging.
# Default to `Rails.logger` (when in Rails) or logging to STDOUT.
#
# @return [#debug]
attr_accessor :logger
@@ -84,32 +102,29 @@
# Set this to false to skip client side validation in the operation.
# Default to true.
# @return [true, false]
attr_accessor :client_side_validation
-{{^isFaraday}}
-{{> configuration_tls_typhoeus_partial}}
-{{/isFaraday}}
+{{#isTyphoeus}}
+{{> configuration_typhoeus_partial}}
+{{/isTyphoeus}}
{{#isFaraday}}
-{{> configuration_tls_faraday_partial}}
+{{> configuration_faraday_partial}}
{{/isFaraday}}
- # Set this to customize parameters encoding of array parameter with multi collectionFormat.
- # Default to nil.
- #
- # @see The params_encoding option of Ethon. Related source code:
- # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96
- attr_accessor :params_encoding
+{{#isHttpx}}
+{{> configuration_httpx_partial}}
+{{/isHttpx}}
attr_accessor :inject_format
attr_accessor :force_ending_format
def initialize
@scheme = '{{scheme}}'
@host = '{{host}}{{#port}}:{{{.}}}{{/port}}'
@base_path = '{{contextPath}}'
- @server_index = 0
+ @server_index = nil
@server_operation_index = {}
@server_variables = {}
@server_operation_variables = {}
@api_key = {}
@api_key_prefix = {}
@@ -118,24 +133,33 @@
@ssl_verify = true
@ssl_verify_mode = nil
@ssl_ca_file = nil
@ssl_client_cert = nil
@ssl_client_key = nil
- @middlewares = []
- @request_middlewares = []
- @response_middlewares = []
+ @middlewares = Hash.new { |h, k| h[k] = [] }
+ @configure_connection_blocks = []
@timeout = 60
+ # return data as binary instead of file
+ @return_binary_data = false
+ @params_encoder = nil
{{/isFaraday}}
- {{^isFaraday}}
+ {{#isTyphoeus}}
@verify_ssl = true
@verify_ssl_host = true
- @params_encoding = nil
@cert_file = nil
@key_file = nil
@timeout = 0
- {{/isFaraday}}
+ @params_encoding = nil
+ {{/isTyphoeus}}
+ {{#isHttpx}}
+ @ssl = nil
+ @proxy = nil
+ @timeout = 60
+ @configure_session_blocks = []
+ {{/isHttpx}}
@debugging = false
+ @ignore_operation_servers = false
@inject_format = false
@force_ending_format = false
@logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
yield(self) if block_given?
@@ -166,14 +190,17 @@
@base_path = '' if @base_path == '/'
end
# Returns base URL for specified operation based on server settings
def base_url(operation = nil)
- index = server_operation_index.fetch(operation, server_index)
- return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if index == nil
-
- server_url(index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
+ return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if ignore_operation_servers
+ if operation_server_settings.key?(operation) then
+ index = server_operation_index.fetch(operation, server_index)
+ server_url(index.nil? ? 0 : index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
+ else
+ server_index.nil? ? "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') : server_url(server_index, server_variables, nil)
+ end
end
# Gets API key (with prefix if set).
# @param [String] param_name the parameter name of API key auth
def api_key_with_prefix(param_name, param_alias = nil)
@@ -184,10 +211,16 @@
else
key
end
end
+ # Gets access_token using access_token_getter or uses the static access_token
+ def access_token_with_refresh
+ return access_token if access_token_getter.nil?
+ access_token_getter.call
+ end
+
# Gets Basic Auth token string
def basic_auth_token
'Basic ' + ["#{username}:#{password}"].pack('m').delete("\r\n")
end
@@ -309,12 +342,12 @@
# @param variables hash of variable and the corresponding value
def server_url(index, variables = {}, servers = nil)
servers = server_settings if servers == nil
# 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}"
+ if (index.nil? || index < 0 || index >= servers.size)
+ fail ArgumentError, "Invalid index #{index} when selecting the server. Must not be nil and must be less than #{servers.size}"
end
server = servers[index]
url = server[:url]
@@ -336,37 +369,110 @@
url
end
{{#isFaraday}}
+ # Configure Faraday connection directly.
+ #
+ # ```
+ # c.configure_faraday_connection do |conn|
+ # conn.use Faraday::HttpCache, shared_cache: false, logger: logger
+ # conn.response :logger, nil, headers: true, bodies: true, log_level: :debug do |logger|
+ # logger.filter(/(Authorization: )(.*)/, '\1[REDACTED]')
+ # end
+ # end
+ #
+ # c.configure_faraday_connection do |conn|
+ # conn.adapter :typhoeus
+ # end
+ # ```
+ #
+ # @param block [Proc] `#call`able object that takes one arg, the connection
+ def configure_faraday_connection(&block)
+ @configure_connection_blocks << block
+ end
+
+ def configure_connection(conn)
+ @configure_connection_blocks.each do |block|
+ block.call(conn)
+ end
+ end
+
# 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)
- end
+ return if @middlewares.empty?
- @request_middlewares.each do |middleware|
- connection.request(*middleware)
+ [: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
- @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}}
+
+ {{#isHttpx}}
+ # Configure Httpx session directly.
+ #
+ # ```
+ # c.configure_session do |http|
+ # http.plugin(:follow_redirects).with(debug: STDOUT, debug_level: 1)
+ # end
+ # ```
+ #
+ # @param block [Proc] `#call`able object that takes one arg, the connection
+ def configure_session(&block)
+ @configure_session_blocks << block
+ end
+
+
+ def configure(session)
+ @configure_session_blocks.reduce(session) do |configured_sess, block|
+ block.call(configured_sess)
+ end
+ end
+ {{/isHttpx}}
end
end