lib/snaptrade/configuration.rb in snaptrade-1.7.0 vs lib/snaptrade/configuration.rb in snaptrade-1.8.0
- old
+ new
@@ -1,111 +1,111 @@
-=begin
-#SnapTrade
-
-#Connect brokerage accounts to your app for live positions and trading
-
-The version of the OpenAPI document: 1.0.0
-Contact: api@snaptrade.com
-
-=end
-
-module SnapTrade
- class Configuration
- # Defines url scheme
- attr_accessor :scheme
-
- # Defines url host
- attr_accessor :host
-
- # Defines url base path
- attr_accessor :base_path
-
- # Define server configuration index
- attr_accessor :server_index
-
- # Define server operation configuration index
- attr_accessor :server_operation_index
-
- # Default server variables
- attr_accessor :server_variables
-
- # Default server operation variables
- attr_accessor :server_operation_variables
-
- def client_id=(value)
- @api_key['PartnerClientId'] = value
- end
-
- def signature=(value)
- @api_key['PartnerSignature'] = value
- end
-
- def timestamp=(value)
- @api_key['PartnerTimestamp'] = value
- end
-
- # client state configured through konfig.yaml
- attr_accessor :consumer_key
-
- # Defines API keys used with API Key authentications.
- #
- # @return [Hash] key: parameter name, value: parameter value (API key)
- #
- # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string)
- # config.api_key['api_key'] = 'xxx'
- attr_accessor :api_key
-
- # Defines API key prefixes used with API Key authentications.
- #
- # @return [Hash] key: parameter name, value: API key prefix
- #
- # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers)
- # config.api_key_prefix['api_key'] = 'Token'
- attr_accessor :api_key_prefix
-
- # Defines the username used with HTTP basic authentication.
- #
- # @return [String]
- attr_accessor :username
-
- # Defines the password used with HTTP basic authentication.
- #
- # @return [String]
- attr_accessor :password
-
- # Defines the access token (Bearer) used with OAuth2.
- attr_accessor :access_token
-
- # 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
-
- # Defines the logger used for debugging.
- # Default to `Rails.logger` (when in Rails) or logging to STDOUT.
- #
- # @return [#debug]
- attr_accessor :logger
-
- # Defines the temporary folder to store downloaded files
- # (for API endpoints that have file response).
- # Default to use `Tempfile`.
- #
- # @return [String]
- attr_accessor :temp_folder_path
-
- # The time limit for HTTP request in seconds.
- # Default to 0 (never times out).
- attr_accessor :timeout
-
- # Set this to false to skip client side validation in the operation.
- # Default to true.
- # @return [true, false]
- attr_accessor :client_side_validation
-
+=begin
+#SnapTrade
+
+#Connect brokerage accounts to your app for live positions and trading
+
+The version of the OpenAPI document: 1.0.0
+Contact: api@snaptrade.com
+
+=end
+
+module SnapTrade
+ class Configuration
+ # Defines url scheme
+ attr_accessor :scheme
+
+ # Defines url host
+ attr_accessor :host
+
+ # Defines url base path
+ attr_accessor :base_path
+
+ # Define server configuration index
+ attr_accessor :server_index
+
+ # Define server operation configuration index
+ attr_accessor :server_operation_index
+
+ # Default server variables
+ attr_accessor :server_variables
+
+ # Default server operation variables
+ attr_accessor :server_operation_variables
+
+ def client_id=(value)
+ @api_key['PartnerClientId'] = value
+ end
+
+ def signature=(value)
+ @api_key['PartnerSignature'] = value
+ end
+
+ def timestamp=(value)
+ @api_key['PartnerTimestamp'] = value
+ end
+
+ # client state configured through konfig.yaml
+ attr_accessor :consumer_key
+
+ # Defines API keys used with API Key authentications.
+ #
+ # @return [Hash] key: parameter name, value: parameter value (API key)
+ #
+ # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string)
+ # config.api_key['api_key'] = 'xxx'
+ attr_accessor :api_key
+
+ # Defines API key prefixes used with API Key authentications.
+ #
+ # @return [Hash] key: parameter name, value: API key prefix
+ #
+ # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers)
+ # config.api_key_prefix['api_key'] = 'Token'
+ attr_accessor :api_key_prefix
+
+ # Defines the username used with HTTP basic authentication.
+ #
+ # @return [String]
+ attr_accessor :username
+
+ # Defines the password used with HTTP basic authentication.
+ #
+ # @return [String]
+ attr_accessor :password
+
+ # Defines the access token (Bearer) used with OAuth2.
+ attr_accessor :access_token
+
+ # 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
+
+ # Defines the logger used for debugging.
+ # Default to `Rails.logger` (when in Rails) or logging to STDOUT.
+ #
+ # @return [#debug]
+ attr_accessor :logger
+
+ # Defines the temporary folder to store downloaded files
+ # (for API endpoints that have file response).
+ # Default to use `Tempfile`.
+ #
+ # @return [String]
+ attr_accessor :temp_folder_path
+
+ # The time limit for HTTP request in seconds.
+ # Default to 0 (never times out).
+ attr_accessor :timeout
+
+ # Set this to false to skip client side validation in the operation.
+ # Default to true.
+ # @return [true, false]
+ attr_accessor :client_side_validation
+
### TLS/SSL setting
# Set this to false to skip verifying SSL certificate when calling API from https server.
# Default to true.
#
# @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
@@ -142,233 +142,233 @@
# Default to nil. Faraday uses NestedParamsEncoder when nil.
#
# @see The params_encoder option of Faraday. Related source code:
# https://github.com/lostisland/faraday/tree/main/lib/faraday/encoders
attr_accessor :params_encoder
-
-
- attr_accessor :inject_format
-
- attr_accessor :force_ending_format
-
- def initialize
- @scheme = 'https'
- @host = 'api.snaptrade.com'
- @base_path = '/api/v1'
- @server_index = 0
- @server_operation_index = {}
- @server_variables = {}
- @server_operation_variables = {}
- @api_key = {}
- @api_key_prefix = {}
- @client_side_validation = true
- @ssl_verify = true
- @ssl_verify_mode = nil
- @ssl_ca_file = nil
- @ssl_client_cert = nil
- @ssl_client_key = nil
- @middlewares = Hash.new { |h, k| h[k] = [] }
- @timeout = 60
- # return data as binary instead of file
- @return_binary_data = false
- @params_encoder = nil
- @debugging = false
- @inject_format = false
- @force_ending_format = false
- @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
-
- yield(self) if block_given?
- end
-
- # The default Configuration object.
- def self.default
- @@default ||= Configuration.new
- end
-
- def configure
- yield(self) if block_given?
- end
-
- def scheme=(scheme)
- # remove :// from scheme
- @scheme = scheme.sub(/:\/\//, '')
- end
-
- def host=(host)
- # remove http(s):// and anything after a slash
- @host = host.sub(/https?:\/\//, '').split('/').first
-
- # try to set @scheme and @base_path if possible
- begin
- uri = URI.parse(host)
- @scheme = uri.scheme
- @base_path = uri.path
- rescue InvalidURIError
- end
-
- # unset server_index so host is used when getting request url (see ApiClient#build_request_url)
- @server_index = nil
- end
-
- def base_path=(base_path)
- # Add leading and trailing slashes to base_path
- @base_path = "/#{base_path}".gsub(/\/+/, '/')
- @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])
- 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)
- key = @api_key[param_name]
- key = @api_key.fetch(param_alias, key) unless param_alias.nil?
- if @api_key_prefix[param_name]
- "#{@api_key_prefix[param_name]} #{key}"
- else
- key
- end
- end
-
- # Gets Basic Auth token string
- def basic_auth_token
- 'Basic ' + ["#{username}:#{password}"].pack('m').delete("\r\n")
- end
-
- # Returns Auth Settings hash for api client.
- def auth_settings
- {
- 'PartnerClientId' =>
- {
- type: 'api_key',
- in: 'query',
- key: 'clientId',
- value: api_key_with_prefix('PartnerClientId')
- },
- 'PartnerSignature' =>
- {
- type: 'api_key',
- in: 'header',
- key: 'Signature',
- value: api_key_with_prefix('PartnerSignature')
- },
- 'PartnerTimestamp' =>
- {
- type: 'api_key',
- in: 'query',
- key: 'timestamp',
- value: api_key_with_prefix('PartnerTimestamp')
- },
- }
- end
-
- # Returns an array of Server setting
- def server_settings
- [
- {
- url: "https://api.snaptrade.com/api/v1",
- description: "SnapTrade Production API",
- }
- ]
- end
-
- def operation_server_settings
- {
- }
- 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 = 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}"
- end
-
- server = servers[index]
- url = server[:url]
-
- return url unless server.key? :variables
-
- # go through variable and assign a value
- server[:variables].each do |name, variable|
- if variables.key?(name)
- if (!server[:variables][name].key?(:enum_values) || 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
-
- # Adds middleware to the stack
- def use(*middleware)
- set_faraday_middleware(:use, *middleware)
- end
-
- # Adds request middleware to the stack
- def request(*middleware)
- set_faraday_middleware(:request, *middleware)
- end
-
- # Adds response middleware to the stack
- def response(*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)
- 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
-
- if @middlewares.key?(:delete)
- @middlewares[:delete].each do |key, _args, _block|
- connection.builder.delete(key)
- end
- end
- end
- end
-end
+
+
+ attr_accessor :inject_format
+
+ attr_accessor :force_ending_format
+
+ def initialize
+ @scheme = 'https'
+ @host = 'api.snaptrade.com'
+ @base_path = '/api/v1'
+ @server_index = 0
+ @server_operation_index = {}
+ @server_variables = {}
+ @server_operation_variables = {}
+ @api_key = {}
+ @api_key_prefix = {}
+ @client_side_validation = true
+ @ssl_verify = true
+ @ssl_verify_mode = nil
+ @ssl_ca_file = nil
+ @ssl_client_cert = nil
+ @ssl_client_key = nil
+ @middlewares = Hash.new { |h, k| h[k] = [] }
+ @timeout = 60
+ # return data as binary instead of file
+ @return_binary_data = false
+ @params_encoder = nil
+ @debugging = false
+ @inject_format = false
+ @force_ending_format = false
+ @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
+
+ yield(self) if block_given?
+ end
+
+ # The default Configuration object.
+ def self.default
+ @@default ||= Configuration.new
+ end
+
+ def configure
+ yield(self) if block_given?
+ end
+
+ def scheme=(scheme)
+ # remove :// from scheme
+ @scheme = scheme.sub(/:\/\//, '')
+ end
+
+ def host=(host)
+ # remove http(s):// and anything after a slash
+ @host = host.sub(/https?:\/\//, '').split('/').first
+
+ # try to set @scheme and @base_path if possible
+ begin
+ uri = URI.parse(host)
+ @scheme = uri.scheme
+ @base_path = uri.path
+ rescue InvalidURIError
+ end
+
+ # unset server_index so host is used when getting request url (see ApiClient#build_request_url)
+ @server_index = nil
+ end
+
+ def base_path=(base_path)
+ # Add leading and trailing slashes to base_path
+ @base_path = "/#{base_path}".gsub(/\/+/, '/')
+ @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])
+ 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)
+ key = @api_key[param_name]
+ key = @api_key.fetch(param_alias, key) unless param_alias.nil?
+ if @api_key_prefix[param_name]
+ "#{@api_key_prefix[param_name]} #{key}"
+ else
+ key
+ end
+ end
+
+ # Gets Basic Auth token string
+ def basic_auth_token
+ 'Basic ' + ["#{username}:#{password}"].pack('m').delete("\r\n")
+ end
+
+ # Returns Auth Settings hash for api client.
+ def auth_settings
+ {
+ 'PartnerClientId' =>
+ {
+ type: 'api_key',
+ in: 'query',
+ key: 'clientId',
+ value: api_key_with_prefix('PartnerClientId')
+ },
+ 'PartnerSignature' =>
+ {
+ type: 'api_key',
+ in: 'header',
+ key: 'Signature',
+ value: api_key_with_prefix('PartnerSignature')
+ },
+ 'PartnerTimestamp' =>
+ {
+ type: 'api_key',
+ in: 'query',
+ key: 'timestamp',
+ value: api_key_with_prefix('PartnerTimestamp')
+ },
+ }
+ end
+
+ # Returns an array of Server setting
+ def server_settings
+ [
+ {
+ url: "https://api.snaptrade.com/api/v1",
+ description: "SnapTrade Production API",
+ }
+ ]
+ end
+
+ def operation_server_settings
+ {
+ }
+ 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 = 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}"
+ end
+
+ server = servers[index]
+ url = server[:url]
+
+ return url unless server.key? :variables
+
+ # go through variable and assign a value
+ server[:variables].each do |name, variable|
+ if variables.key?(name)
+ if (!server[:variables][name].key?(:enum_values) || 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
+
+ # Adds middleware to the stack
+ def use(*middleware)
+ set_faraday_middleware(:use, *middleware)
+ end
+
+ # Adds request middleware to the stack
+ def request(*middleware)
+ set_faraday_middleware(:request, *middleware)
+ end
+
+ # Adds response middleware to the stack
+ def response(*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)
+ 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
+
+ if @middlewares.key?(:delete)
+ @middlewares[:delete].each do |key, _args, _block|
+ connection.builder.delete(key)
+ end
+ end
+ end
+ end
+end