Class: Api::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/jamm/api/configuration.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize {|_self| ... } ⇒ Configuration

Returns a new instance of Configuration.

Yields:

  • (_self)

Yield Parameters:



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# File 'lib/jamm/api/configuration.rb', line 156

def initialize
  @scheme = 'http'
  @host = 'localhost'
  @base_path = ''
  @server_index = nil
  @server_operation_index = {}
  @server_variables = {}
  @server_operation_variables = {}
  @api_key = {}
  @api_key_prefix = {}
  @client_side_validation = true
  @verify_ssl = true
  @verify_ssl_host = true
  @cert_file = nil
  @key_file = nil
  @timeout = 0
  @params_encoding = nil
  @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?
end

Instance Attribute Details

#access_tokenObject

Defines the access token (Bearer) used with OAuth2.



63
64
65
# File 'lib/jamm/api/configuration.rb', line 63

def access_token
  @access_token
end

#access_token_getterProc

Defines a Proc used to fetch or refresh access tokens (Bearer) used with OAuth2. Overrides the access_token if set

Returns:

  • (Proc)


68
69
70
# File 'lib/jamm/api/configuration.rb', line 68

def access_token_getter
  @access_token_getter
end

#api_keyHash

Defines API keys used with API Key authentications.

Examples:

parameter name is “api_key”, API key is “xxx” (e.g. “api_key=xxx” in query string)

config.api_key['api_key'] = 'xxx'

Returns:

  • (Hash)

    key: parameter name, value: parameter value (API key)



42
43
44
# File 'lib/jamm/api/configuration.rb', line 42

def api_key
  @api_key
end

#api_key_prefixHash

Defines API key prefixes used with API Key authentications.

Examples:

parameter name is “Authorization”, API key prefix is “Token” (e.g. “Authorization: Token xxx” in headers)

config.api_key_prefix['api_key'] = 'Token'

Returns:

  • (Hash)

    key: parameter name, value: API key prefix



50
51
52
# File 'lib/jamm/api/configuration.rb', line 50

def api_key_prefix
  @api_key_prefix
end

#base_pathObject

Defines url base path



22
23
24
# File 'lib/jamm/api/configuration.rb', line 22

def base_path
  @base_path
end

#cert_fileObject

TLS/SSL setting Client certificate file (for client certificate)



141
142
143
# File 'lib/jamm/api/configuration.rb', line 141

def cert_file
  @cert_file
end

#client_side_validationtrue, false

Set this to false to skip client side validation in the operation. Default to true.

Returns:

  • (true, false)


110
111
112
# File 'lib/jamm/api/configuration.rb', line 110

def client_side_validation
  @client_side_validation
end

#debuggingtrue, false

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.

Returns:

  • (true, false)


80
81
82
# File 'lib/jamm/api/configuration.rb', line 80

def debugging
  @debugging
end

#force_ending_formatObject

Returns the value of attribute force_ending_format.



154
155
156
# File 'lib/jamm/api/configuration.rb', line 154

def force_ending_format
  @force_ending_format
end

#hostObject

Defines url host



19
20
21
# File 'lib/jamm/api/configuration.rb', line 19

def host
  @host
end

#ignore_operation_serverstrue, false

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.

Returns:

  • (true, false)


88
89
90
# File 'lib/jamm/api/configuration.rb', line 88

def ignore_operation_servers
  @ignore_operation_servers
end

#inject_formatObject

Returns the value of attribute inject_format.



154
155
156
# File 'lib/jamm/api/configuration.rb', line 154

def inject_format
  @inject_format
end

#key_fileObject

TLS/SSL setting Client private key file (for client certificate)



145
146
147
# File 'lib/jamm/api/configuration.rb', line 145

def key_file
  @key_file
end

#logger#debug

Defines the logger used for debugging. Default to ‘Rails.logger` (when in Rails) or logging to STDOUT.

Returns:

  • (#debug)


94
95
96
# File 'lib/jamm/api/configuration.rb', line 94

def logger
  @logger
end

#params_encodingObject

Set this to customize parameters encoding of array parameter with multi collectionFormat. Default to nil.

github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96

See Also:

  • params_encoding option of Ethon. Related source code:


152
153
154
# File 'lib/jamm/api/configuration.rb', line 152

def params_encoding
  @params_encoding
end

#passwordString

Defines the password used with HTTP basic authentication.

Returns:

  • (String)


60
61
62
# File 'lib/jamm/api/configuration.rb', line 60

def password
  @password
end

#return_binary_dataObject

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.



73
74
75
# File 'lib/jamm/api/configuration.rb', line 73

def return_binary_data
  @return_binary_data
end

#schemeObject

Defines url scheme



16
17
18
# File 'lib/jamm/api/configuration.rb', line 16

def scheme
  @scheme
end

#server_indexObject

Define server configuration index



25
26
27
# File 'lib/jamm/api/configuration.rb', line 25

def server_index
  @server_index
end

#server_operation_indexObject

Define server operation configuration index



28
29
30
# File 'lib/jamm/api/configuration.rb', line 28

def server_operation_index
  @server_operation_index
end

#server_operation_variablesObject

Default server operation variables



34
35
36
# File 'lib/jamm/api/configuration.rb', line 34

def server_operation_variables
  @server_operation_variables
end

#server_variablesObject

Default server variables



31
32
33
# File 'lib/jamm/api/configuration.rb', line 31

def server_variables
  @server_variables
end

#ssl_ca_certString

TLS/SSL setting Set this to customize the certificate file to verify the peer.

github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145

Returns:

  • (String)

    the path to the certificate file

See Also:

  • `cainfo` option of Typhoeus, `--cert` option of libcurl. Related source code:


137
138
139
# File 'lib/jamm/api/configuration.rb', line 137

def ssl_ca_cert
  @ssl_ca_cert
end

#temp_folder_pathString

Defines the temporary folder to store downloaded files (for API endpoints that have file response). Default to use ‘Tempfile`.

Returns:

  • (String)


101
102
103
# File 'lib/jamm/api/configuration.rb', line 101

def temp_folder_path
  @temp_folder_path
end

#timeoutObject

The time limit for HTTP request in seconds. Default to 0 (never times out).



105
106
107
# File 'lib/jamm/api/configuration.rb', line 105

def timeout
  @timeout
end

#usernameString

Defines the username used with HTTP basic authentication.

Returns:

  • (String)


55
56
57
# File 'lib/jamm/api/configuration.rb', line 55

def username
  @username
end

#verify_ssltrue, false

Note:

Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.

TLS/SSL setting Set this to false to skip verifying SSL certificate when calling API from https server. Default to true.

Returns:

  • (true, false)


119
120
121
# File 'lib/jamm/api/configuration.rb', line 119

def verify_ssl
  @verify_ssl
end

#verify_ssl_hosttrue, false

Note:

Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.

TLS/SSL setting Set this to false to skip verifying SSL host name Default to true.

Returns:

  • (true, false)


128
129
130
# File 'lib/jamm/api/configuration.rb', line 128

def verify_ssl_host
  @verify_ssl_host
end

Class Method Details

.defaultObject

The default Configuration object.



183
184
185
# File 'lib/jamm/api/configuration.rb', line 183

def self.default
  @@default ||= Configuration.new
end

Instance Method Details

#access_token_with_refreshObject

Gets access_token using access_token_getter or uses the static access_token



232
233
234
235
236
# File 'lib/jamm/api/configuration.rb', line 232

def access_token_with_refresh
  return access_token if access_token_getter.nil?

  access_token_getter.call
end

#api_key_with_prefix(param_name, param_alias = nil) ⇒ Object

Gets API key (with prefix if set).

Parameters:

  • param_name (String)

    the parameter name of API key auth



221
222
223
224
225
226
227
228
229
# File 'lib/jamm/api/configuration.rb', line 221

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

#auth_settingsObject

Returns Auth Settings hash for api client.



244
245
246
# File 'lib/jamm/api/configuration.rb', line 244

def auth_settings
  {}
end

#base_url(operation = nil) ⇒ Object

Returns base URL for specified operation based on server settings



208
209
210
211
212
213
214
215
216
217
# File 'lib/jamm/api/configuration.rb', line 208

def base_url(operation = nil)
  return "#{scheme}://#{[host, base_path].join('/').gsub(%r{/+}, '/')}".sub(%r{/+\z}, '') if ignore_operation_servers

  if operation_server_settings.key?(operation)
    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(%r{/+}, '/')}".sub(%r{/+\z}, '') : server_url(server_index, server_variables, nil)
  end
end

#basic_auth_tokenObject

Gets Basic Auth token string



239
240
241
# File 'lib/jamm/api/configuration.rb', line 239

def basic_auth_token
  "Basic #{["#{username}:#{password}"].pack('m').delete("\r\n")}"
end

#configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



187
188
189
# File 'lib/jamm/api/configuration.rb', line 187

def configure
  yield(self) if block_given?
end

#operation_server_settingsObject



258
259
260
# File 'lib/jamm/api/configuration.rb', line 258

def operation_server_settings
  {}
end

#server_settingsObject

Returns an array of Server setting



249
250
251
252
253
254
255
256
# File 'lib/jamm/api/configuration.rb', line 249

def server_settings
  [
    {
      url: '',
      description: 'No description provided'
    }
  ]
end

#server_url(index, variables = {}, servers = nil) ⇒ Object

Returns URL based on server settings

Parameters:

  • index

    array index of the server settings

  • variables (defaults to: {})

    hash of variable and the corresponding value

Raises:

  • (ArgumentError)


266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
# File 'lib/jamm/api/configuration.rb', line 266

def server_url(index, variables = {}, servers = nil)
  servers = server_settings if servers.nil?

  # check array index out of bound
  raise ArgumentError, "Invalid index #{index} when selecting the server. Must not be nil and must be less than #{servers.size}" if index.nil? || index.negative? || index >= servers.size

  server = servers[index]
  url = server[:url]

  return url unless server.key? :variables

  # go through variable and assign a value
  server[:variables].each_key do |name|
    if variables.key?(name)
      raise ArgumentError, "The variable `#{name}` in the server URL has invalid value #{variables[name]}. Must be #{server[:variables][name][:enum_values]}." unless !server[:variables][name].key?(:enum_values) || server[:variables][name][:enum_values].include?(variables[name])

      url.gsub! "{#{name}}", variables[name]

    else
      # use default value
      url.gsub! "{#{name}}", server[:variables][name][:default_value]
    end
  end

  url
end