pulp_maven_client 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,413 @@
1
+ =begin
2
+ #Pulp 3 API
3
+
4
+ #Fetch, Upload, Organize, and Distribute Software Packages
5
+
6
+ The version of the OpenAPI document: v3
7
+ Contact: pulp-list@redhat.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.10.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module PulpMavenClient
17
+ # Shared network configuration fields and validation logic used by both RemoteSerializer and UploadSerializerFieldsMixin.
18
+ class RemoteNetworkConfigResponse
19
+ # A PEM encoded CA certificate used to validate the server certificate presented by the remote server.
20
+ attr_accessor :ca_cert
21
+
22
+ # A PEM encoded client certificate used for authentication.
23
+ attr_accessor :client_cert
24
+
25
+ # If True, TLS peer validation must be performed.
26
+ attr_accessor :tls_validation
27
+
28
+ # The proxy URL. Format: scheme://host:port
29
+ attr_accessor :proxy_url
30
+
31
+ # Maximum number of retry attempts after a download failure. If not set then the default value (3) will be used.
32
+ attr_accessor :max_retries
33
+
34
+ # aiohttp.ClientTimeout.total (q.v.) for download-connections. The default is null, which will cause the default from the aiohttp library to be used.
35
+ attr_accessor :total_timeout
36
+
37
+ # aiohttp.ClientTimeout.connect (q.v.) for download-connections. The default is null, which will cause the default from the aiohttp library to be used.
38
+ attr_accessor :connect_timeout
39
+
40
+ # aiohttp.ClientTimeout.sock_connect (q.v.) for download-connections. The default is null, which will cause the default from the aiohttp library to be used.
41
+ attr_accessor :sock_connect_timeout
42
+
43
+ # aiohttp.ClientTimeout.sock_read (q.v.) for download-connections. The default is null, which will cause the default from the aiohttp library to be used.
44
+ attr_accessor :sock_read_timeout
45
+
46
+ # Headers for aiohttp.Clientsession
47
+ attr_accessor :headers
48
+
49
+ # Total number of simultaneous connections. If not set then the default value will be used.
50
+ attr_accessor :download_concurrency
51
+
52
+ # Limits requests per second for each concurrent downloader
53
+ attr_accessor :rate_limit
54
+
55
+ # Attribute mapping from ruby-style variable name to JSON key.
56
+ def self.attribute_map
57
+ {
58
+ :'ca_cert' => :'ca_cert',
59
+ :'client_cert' => :'client_cert',
60
+ :'tls_validation' => :'tls_validation',
61
+ :'proxy_url' => :'proxy_url',
62
+ :'max_retries' => :'max_retries',
63
+ :'total_timeout' => :'total_timeout',
64
+ :'connect_timeout' => :'connect_timeout',
65
+ :'sock_connect_timeout' => :'sock_connect_timeout',
66
+ :'sock_read_timeout' => :'sock_read_timeout',
67
+ :'headers' => :'headers',
68
+ :'download_concurrency' => :'download_concurrency',
69
+ :'rate_limit' => :'rate_limit'
70
+ }
71
+ end
72
+
73
+ # Returns all the JSON keys this model knows about
74
+ def self.acceptable_attributes
75
+ attribute_map.values
76
+ end
77
+
78
+ # Attribute type mapping.
79
+ def self.openapi_types
80
+ {
81
+ :'ca_cert' => :'String',
82
+ :'client_cert' => :'String',
83
+ :'tls_validation' => :'Boolean',
84
+ :'proxy_url' => :'String',
85
+ :'max_retries' => :'Integer',
86
+ :'total_timeout' => :'Float',
87
+ :'connect_timeout' => :'Float',
88
+ :'sock_connect_timeout' => :'Float',
89
+ :'sock_read_timeout' => :'Float',
90
+ :'headers' => :'Array<Object>',
91
+ :'download_concurrency' => :'Integer',
92
+ :'rate_limit' => :'Integer'
93
+ }
94
+ end
95
+
96
+ # List of attributes with nullable: true
97
+ def self.openapi_nullable
98
+ Set.new([
99
+ :'ca_cert',
100
+ :'client_cert',
101
+ :'proxy_url',
102
+ :'max_retries',
103
+ :'total_timeout',
104
+ :'connect_timeout',
105
+ :'sock_connect_timeout',
106
+ :'sock_read_timeout',
107
+ :'download_concurrency',
108
+ :'rate_limit'
109
+ ])
110
+ end
111
+
112
+ # Initializes the object
113
+ # @param [Hash] attributes Model attributes in the form of hash
114
+ def initialize(attributes = {})
115
+ if (!attributes.is_a?(Hash))
116
+ fail ArgumentError, "The input argument (attributes) must be a hash in `PulpMavenClient::RemoteNetworkConfigResponse` initialize method"
117
+ end
118
+
119
+ # check to see if the attribute exists and convert string to symbol for hash key
120
+ attributes = attributes.each_with_object({}) { |(k, v), h|
121
+ if (!self.class.attribute_map.key?(k.to_sym))
122
+ fail ArgumentError, "`#{k}` is not a valid attribute in `PulpMavenClient::RemoteNetworkConfigResponse`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
123
+ end
124
+ h[k.to_sym] = v
125
+ }
126
+
127
+ if attributes.key?(:'ca_cert')
128
+ self.ca_cert = attributes[:'ca_cert']
129
+ end
130
+
131
+ if attributes.key?(:'client_cert')
132
+ self.client_cert = attributes[:'client_cert']
133
+ end
134
+
135
+ if attributes.key?(:'tls_validation')
136
+ self.tls_validation = attributes[:'tls_validation']
137
+ end
138
+
139
+ if attributes.key?(:'proxy_url')
140
+ self.proxy_url = attributes[:'proxy_url']
141
+ end
142
+
143
+ if attributes.key?(:'max_retries')
144
+ self.max_retries = attributes[:'max_retries']
145
+ end
146
+
147
+ if attributes.key?(:'total_timeout')
148
+ self.total_timeout = attributes[:'total_timeout']
149
+ end
150
+
151
+ if attributes.key?(:'connect_timeout')
152
+ self.connect_timeout = attributes[:'connect_timeout']
153
+ end
154
+
155
+ if attributes.key?(:'sock_connect_timeout')
156
+ self.sock_connect_timeout = attributes[:'sock_connect_timeout']
157
+ end
158
+
159
+ if attributes.key?(:'sock_read_timeout')
160
+ self.sock_read_timeout = attributes[:'sock_read_timeout']
161
+ end
162
+
163
+ if attributes.key?(:'headers')
164
+ if (value = attributes[:'headers']).is_a?(Array)
165
+ self.headers = value
166
+ end
167
+ end
168
+
169
+ if attributes.key?(:'download_concurrency')
170
+ self.download_concurrency = attributes[:'download_concurrency']
171
+ end
172
+
173
+ if attributes.key?(:'rate_limit')
174
+ self.rate_limit = attributes[:'rate_limit']
175
+ end
176
+ end
177
+
178
+ # Show invalid properties with the reasons. Usually used together with valid?
179
+ # @return Array for valid properties with the reasons
180
+ def list_invalid_properties
181
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
182
+ invalid_properties = Array.new
183
+ if !@total_timeout.nil? && @total_timeout < 0.0
184
+ invalid_properties.push('invalid value for "total_timeout", must be greater than or equal to 0.0.')
185
+ end
186
+
187
+ if !@connect_timeout.nil? && @connect_timeout < 0.0
188
+ invalid_properties.push('invalid value for "connect_timeout", must be greater than or equal to 0.0.')
189
+ end
190
+
191
+ if !@sock_connect_timeout.nil? && @sock_connect_timeout < 0.0
192
+ invalid_properties.push('invalid value for "sock_connect_timeout", must be greater than or equal to 0.0.')
193
+ end
194
+
195
+ if !@sock_read_timeout.nil? && @sock_read_timeout < 0.0
196
+ invalid_properties.push('invalid value for "sock_read_timeout", must be greater than or equal to 0.0.')
197
+ end
198
+
199
+ if !@download_concurrency.nil? && @download_concurrency < 1
200
+ invalid_properties.push('invalid value for "download_concurrency", must be greater than or equal to 1.')
201
+ end
202
+
203
+ invalid_properties
204
+ end
205
+
206
+ # Check to see if the all the properties in the model are valid
207
+ # @return true if the model is valid
208
+ def valid?
209
+ warn '[DEPRECATED] the `valid?` method is obsolete'
210
+ return false if !@total_timeout.nil? && @total_timeout < 0.0
211
+ return false if !@connect_timeout.nil? && @connect_timeout < 0.0
212
+ return false if !@sock_connect_timeout.nil? && @sock_connect_timeout < 0.0
213
+ return false if !@sock_read_timeout.nil? && @sock_read_timeout < 0.0
214
+ return false if !@download_concurrency.nil? && @download_concurrency < 1
215
+ true
216
+ end
217
+
218
+ # Custom attribute writer method with validation
219
+ # @param [Object] total_timeout Value to be assigned
220
+ def total_timeout=(total_timeout)
221
+ if !total_timeout.nil? && total_timeout < 0.0
222
+ fail ArgumentError, 'invalid value for "total_timeout", must be greater than or equal to 0.0.'
223
+ end
224
+
225
+ @total_timeout = total_timeout
226
+ end
227
+
228
+ # Custom attribute writer method with validation
229
+ # @param [Object] connect_timeout Value to be assigned
230
+ def connect_timeout=(connect_timeout)
231
+ if !connect_timeout.nil? && connect_timeout < 0.0
232
+ fail ArgumentError, 'invalid value for "connect_timeout", must be greater than or equal to 0.0.'
233
+ end
234
+
235
+ @connect_timeout = connect_timeout
236
+ end
237
+
238
+ # Custom attribute writer method with validation
239
+ # @param [Object] sock_connect_timeout Value to be assigned
240
+ def sock_connect_timeout=(sock_connect_timeout)
241
+ if !sock_connect_timeout.nil? && sock_connect_timeout < 0.0
242
+ fail ArgumentError, 'invalid value for "sock_connect_timeout", must be greater than or equal to 0.0.'
243
+ end
244
+
245
+ @sock_connect_timeout = sock_connect_timeout
246
+ end
247
+
248
+ # Custom attribute writer method with validation
249
+ # @param [Object] sock_read_timeout Value to be assigned
250
+ def sock_read_timeout=(sock_read_timeout)
251
+ if !sock_read_timeout.nil? && sock_read_timeout < 0.0
252
+ fail ArgumentError, 'invalid value for "sock_read_timeout", must be greater than or equal to 0.0.'
253
+ end
254
+
255
+ @sock_read_timeout = sock_read_timeout
256
+ end
257
+
258
+ # Custom attribute writer method with validation
259
+ # @param [Object] download_concurrency Value to be assigned
260
+ def download_concurrency=(download_concurrency)
261
+ if !download_concurrency.nil? && download_concurrency < 1
262
+ fail ArgumentError, 'invalid value for "download_concurrency", must be greater than or equal to 1.'
263
+ end
264
+
265
+ @download_concurrency = download_concurrency
266
+ end
267
+
268
+ # Checks equality by comparing each attribute.
269
+ # @param [Object] Object to be compared
270
+ def ==(o)
271
+ return true if self.equal?(o)
272
+ self.class == o.class &&
273
+ ca_cert == o.ca_cert &&
274
+ client_cert == o.client_cert &&
275
+ tls_validation == o.tls_validation &&
276
+ proxy_url == o.proxy_url &&
277
+ max_retries == o.max_retries &&
278
+ total_timeout == o.total_timeout &&
279
+ connect_timeout == o.connect_timeout &&
280
+ sock_connect_timeout == o.sock_connect_timeout &&
281
+ sock_read_timeout == o.sock_read_timeout &&
282
+ headers == o.headers &&
283
+ download_concurrency == o.download_concurrency &&
284
+ rate_limit == o.rate_limit
285
+ end
286
+
287
+ # @see the `==` method
288
+ # @param [Object] Object to be compared
289
+ def eql?(o)
290
+ self == o
291
+ end
292
+
293
+ # Calculates hash code according to all attributes.
294
+ # @return [Integer] Hash code
295
+ def hash
296
+ [ca_cert, client_cert, tls_validation, proxy_url, max_retries, total_timeout, connect_timeout, sock_connect_timeout, sock_read_timeout, headers, download_concurrency, rate_limit].hash
297
+ end
298
+
299
+ # Builds the object from hash
300
+ # @param [Hash] attributes Model attributes in the form of hash
301
+ # @return [Object] Returns the model itself
302
+ def self.build_from_hash(attributes)
303
+ return nil unless attributes.is_a?(Hash)
304
+ attributes = attributes.transform_keys(&:to_sym)
305
+ transformed_hash = {}
306
+ openapi_types.each_pair do |key, type|
307
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
308
+ transformed_hash["#{key}"] = nil
309
+ elsif type =~ /\AArray<(.*)>/i
310
+ # check to ensure the input is an array given that the attribute
311
+ # is documented as an array but the input is not
312
+ if attributes[attribute_map[key]].is_a?(Array)
313
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
314
+ end
315
+ elsif !attributes[attribute_map[key]].nil?
316
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
317
+ end
318
+ end
319
+ new(transformed_hash)
320
+ end
321
+
322
+ # Deserializes the data based on type
323
+ # @param string type Data type
324
+ # @param string value Value to be deserialized
325
+ # @return [Object] Deserialized data
326
+ def self._deserialize(type, value)
327
+ case type.to_sym
328
+ when :Time
329
+ Time.parse(value)
330
+ when :Date
331
+ Date.parse(value)
332
+ when :String
333
+ value.to_s
334
+ when :Integer
335
+ value.to_i
336
+ when :Float
337
+ value.to_f
338
+ when :Boolean
339
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
340
+ true
341
+ else
342
+ false
343
+ end
344
+ when :Object
345
+ # generic object (usually a Hash), return directly
346
+ value
347
+ when /\AArray<(?<inner_type>.+)>\z/
348
+ inner_type = Regexp.last_match[:inner_type]
349
+ value.map { |v| _deserialize(inner_type, v) }
350
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
351
+ k_type = Regexp.last_match[:k_type]
352
+ v_type = Regexp.last_match[:v_type]
353
+ {}.tap do |hash|
354
+ value.each do |k, v|
355
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
356
+ end
357
+ end
358
+ else # model
359
+ # models (e.g. Pet) or oneOf
360
+ klass = PulpMavenClient.const_get(type)
361
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
362
+ end
363
+ end
364
+
365
+ # Returns the string representation of the object
366
+ # @return [String] String presentation of the object
367
+ def to_s
368
+ to_hash.to_s
369
+ end
370
+
371
+ # to_body is an alias to to_hash (backward compatibility)
372
+ # @return [Hash] Returns the object in the form of hash
373
+ def to_body
374
+ to_hash
375
+ end
376
+
377
+ # Returns the object in the form of hash
378
+ # @return [Hash] Returns the object in the form of hash
379
+ def to_hash
380
+ hash = {}
381
+ self.class.attribute_map.each_pair do |attr, param|
382
+ value = self.send(attr)
383
+ if value.nil?
384
+ is_nullable = self.class.openapi_nullable.include?(attr)
385
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
386
+ end
387
+
388
+ hash[param] = _to_hash(value)
389
+ end
390
+ hash
391
+ end
392
+
393
+ # Outputs non-array value in the form of hash
394
+ # For object, use to_hash. Otherwise, just return the value
395
+ # @param [Object] value Any valid value
396
+ # @return [Hash] Returns the value in the form of hash
397
+ def _to_hash(value)
398
+ if value.is_a?(Array)
399
+ value.compact.map { |v| _to_hash(v) }
400
+ elsif value.is_a?(Hash)
401
+ {}.tap do |hash|
402
+ value.each { |k, v| hash[k] = _to_hash(v) }
403
+ end
404
+ elsif value.respond_to? :to_hash
405
+ value.to_hash
406
+ else
407
+ value
408
+ end
409
+ end
410
+
411
+ end
412
+
413
+ end
@@ -11,5 +11,5 @@ Generator version: 7.10.0
11
11
  =end
12
12
 
13
13
  module PulpMavenClient
14
- VERSION = '0.15.0'
14
+ VERSION = '0.16.0'
15
15
  end
@@ -36,6 +36,8 @@ require 'pulp_maven_client/models/patchedmaven_maven_distribution'
36
36
  require 'pulp_maven_client/models/patchedmaven_maven_remote'
37
37
  require 'pulp_maven_client/models/patchedmaven_maven_repository'
38
38
  require 'pulp_maven_client/models/policy_enum'
39
+ require 'pulp_maven_client/models/remote_network_config'
40
+ require 'pulp_maven_client/models/remote_network_config_response'
39
41
  require 'pulp_maven_client/models/repair'
40
42
  require 'pulp_maven_client/models/repository_add_cached_content'
41
43
  require 'pulp_maven_client/models/repository_add_remove_content'
@@ -34,7 +34,7 @@ describe 'ContentArtifactApi' do
34
34
 
35
35
  # unit tests for create
36
36
  # Create a maven artifact
37
- # A ViewSet for MavenArtifact.
37
+ # Trigger an asynchronous task to create content,optionally create new repository version.
38
38
  # @param relative_path Path where the artifact is located relative to distributions base_path
39
39
  # @param [Hash] opts the optional parameters
40
40
  # @option opts [Array<String>] :x_task_diagnostics List of profilers to use on tasks.
@@ -43,7 +43,10 @@ describe 'ContentArtifactApi' do
43
43
  # @option opts [Hash<String, String>] :pulp_labels A dictionary of arbitrary key/value pairs used to describe a specific Content instance.
44
44
  # @option opts [String] :artifact Artifact file representing the physical content
45
45
  # @option opts [File] :file An uploaded file that may be turned into the content unit.
46
- # @return [MavenMavenArtifactResponse]
46
+ # @option opts [String] :upload An uncommitted upload that may be turned into the content unit.
47
+ # @option opts [String] :file_url A url that Pulp can download and turn into the content unit.
48
+ # @option opts [RemoteNetworkConfig] :downloader_config Configuration for the download process (e.g., proxies, auth, timeouts). Only applicable when providing a &#39;file_url.
49
+ # @return [AsyncOperationResponse]
47
50
  describe 'create test' do
48
51
  it 'should work' do
49
52
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
@@ -123,4 +126,25 @@ describe 'ContentArtifactApi' do
123
126
  end
124
127
  end
125
128
 
129
+ # unit tests for upload
130
+ # Upload a Maven artifact synchronously.
131
+ # Synchronously upload a Maven artifact.
132
+ # @param relative_path Path where the artifact is located relative to distributions base_path
133
+ # @param [Hash] opts the optional parameters
134
+ # @option opts [Array<String>] :x_task_diagnostics List of profilers to use on tasks.
135
+ # @option opts [String] :repository A URI of a repository the new content unit should be associated with.
136
+ # @option opts [Boolean] :overwrite When set to true, existing content in the repository with the same unique key will be silently overwritten. When set to false, the task will fail if content would be overwritten. Only used when &#39;repository&#39; is specified. Defaults to true.
137
+ # @option opts [Hash<String, String>] :pulp_labels A dictionary of arbitrary key/value pairs used to describe a specific Content instance.
138
+ # @option opts [String] :artifact Artifact file representing the physical content
139
+ # @option opts [File] :file An uploaded file that may be turned into the content unit.
140
+ # @option opts [String] :upload An uncommitted upload that may be turned into the content unit.
141
+ # @option opts [String] :file_url A url that Pulp can download and turn into the content unit.
142
+ # @option opts [RemoteNetworkConfig] :downloader_config Configuration for the download process (e.g., proxies, auth, timeouts). Only applicable when providing a &#39;file_url.
143
+ # @return [MavenMavenArtifactResponse]
144
+ describe 'upload test' do
145
+ it 'should work' do
146
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
147
+ end
148
+ end
149
+
126
150
  end
@@ -0,0 +1,102 @@
1
+ =begin
2
+ #Pulp 3 API
3
+
4
+ #Fetch, Upload, Organize, and Distribute Software Packages
5
+
6
+ The version of the OpenAPI document: v3
7
+ Contact: pulp-list@redhat.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.10.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for PulpMavenClient::RemoteNetworkConfigResponse
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe PulpMavenClient::RemoteNetworkConfigResponse do
21
+ let(:instance) { PulpMavenClient::RemoteNetworkConfigResponse.new }
22
+
23
+ describe 'test an instance of RemoteNetworkConfigResponse' do
24
+ it 'should create an instance of RemoteNetworkConfigResponse' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(PulpMavenClient::RemoteNetworkConfigResponse)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "ca_cert"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "client_cert"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "tls_validation"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ end
46
+ end
47
+
48
+ describe 'test attribute "proxy_url"' do
49
+ it 'should work' do
50
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
51
+ end
52
+ end
53
+
54
+ describe 'test attribute "max_retries"' do
55
+ it 'should work' do
56
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
57
+ end
58
+ end
59
+
60
+ describe 'test attribute "total_timeout"' do
61
+ it 'should work' do
62
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
63
+ end
64
+ end
65
+
66
+ describe 'test attribute "connect_timeout"' do
67
+ it 'should work' do
68
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
69
+ end
70
+ end
71
+
72
+ describe 'test attribute "sock_connect_timeout"' do
73
+ it 'should work' do
74
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
75
+ end
76
+ end
77
+
78
+ describe 'test attribute "sock_read_timeout"' do
79
+ it 'should work' do
80
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
81
+ end
82
+ end
83
+
84
+ describe 'test attribute "headers"' do
85
+ it 'should work' do
86
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
87
+ end
88
+ end
89
+
90
+ describe 'test attribute "download_concurrency"' do
91
+ it 'should work' do
92
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
93
+ end
94
+ end
95
+
96
+ describe 'test attribute "rate_limit"' do
97
+ it 'should work' do
98
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
99
+ end
100
+ end
101
+
102
+ end