qingstor-sdk 2.2.1 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c85e73c270e2630d4e2499bd7ef31f1b6e246d2d
4
- data.tar.gz: 1b3a584bbee63df761921a43d4f8270ae42beab0
2
+ SHA256:
3
+ metadata.gz: cb83b84c4cd53131d0092b26061348057db9f2af57d1d4670bc5cef3b36c12b8
4
+ data.tar.gz: 0c2d01a2a0d134540e57e11cdeaef5f5547cb613b3b8a1ee5a2e531302391a15
5
5
  SHA512:
6
- metadata.gz: 8246701fa0c00c9959dce2e967984fdb9427c0378272eb510766fab145b3a276e4b79d0e275190e297275f96939f82cdce8016e1f3f34a6280e917fc36461c64
7
- data.tar.gz: ac8bc039c6f9be943efae10848bfdc03b225e2d5a7264510f900de43b940998ae7734fcb7d36676d1c65b8b932b4eb53aaf58fb59741197133e538756a0e2c9d
6
+ metadata.gz: bf9f6e59304fa869921e5300b57560f5fae7728b9bb521a6ffc2d1d1d03783871dc03b68b9f08ffa875afef7a0210b237d518f8fd30d24260e6db14a766ce7ad
7
+ data.tar.gz: 394b4f14aea92f46e8b511dbbd283a4e08a9f7d28ef1f5f71e87e0eae63ee32c4bd30a172266638efd9a715fe81a70c91c7dec0c738dabec2eed1175c5376c45
data/README.md CHANGED
@@ -1,11 +1,10 @@
1
1
  # QingStor::SDK
2
2
 
3
- <span style="display: inline-block">
4
- [![Build Status](https://travis-ci.org/yunify/qingstor-sdk-ruby.svg?branch=master)](https://travis-ci.org/yunify/qingstor-sdk-ruby)
3
+ [![Build Status](https://github.com/qingstor/qingstor-sdk-ruby/workflows/Unit%20Test/badge.svg?branch=master)](https://github.com/qingstor/qingstor-sdk-ruby/actions?query=workflow%3A%22Unit+Test%22)
5
4
  [![Gem Version](https://badge.fury.io/rb/qingstor-sdk.svg)](http://badge.fury.io/rb/qingstor-sdk)
6
5
  [![API Reference](http://img.shields.io/badge/api-reference-green.svg)](https://docs.qingcloud.com/qingstor/)
7
6
  [![License](http://img.shields.io/badge/license-apache%20v2-blue.svg)](https://github.com/yunify/qingstor-sdk-ruby/blob/master/LICENSE)
8
- </span>
7
+ [![Join the chat](https://img.shields.io/badge/chat-online-blue?style=flat&logo=zulip)](https://qingstor.zulipchat.com/join/odapi42t7xhqc7v4gb2wfgjx/)
9
8
 
10
9
  The official QingStor SDK for Ruby programming language.
11
10
 
@@ -169,11 +168,52 @@ log_level: 'warn'
169
168
  ## Change Log
170
169
  All notable changes to QingStor SDK for Ruby will be documented here.
171
170
 
171
+ ### [v2.4.0] - 2021-01-05
172
+
173
+ ### Added
174
+
175
+ - Support to set x-qs-metadata-directive header (#29)
176
+ - Add support for bucket replication (#45)
177
+
178
+ ### Changed
179
+
180
+ - ci: Transfer ci into github action (#30)
181
+
182
+ ### Fixed
183
+
184
+ - Fix metadata added into signature when empty (#44)
185
+
186
+ ### [v2.3.0] - 2020-05-11
187
+
188
+ ### Added
189
+
190
+ - Add support for lifecycle and notification.
191
+ - Add support for bucket logging, bucket cname and append object. (#24)
192
+
193
+ ### Fixed
194
+
195
+ - Modify content-type check for application/json. (#21)
196
+ - Fix sub-resources not be recognized when generate signature. (#25)
197
+ - Fix meta data not work as intended. (#26)
198
+ - Reverse fix of empty map in template, should not compact empty hash when sign. (#28)
199
+
200
+ ### [v2.2.3] - 2017-03-28
201
+
202
+ ### Fixed
203
+
204
+ - Fix status code of DELETE CORS API.
205
+
206
+ ### [v2.2.2] - 2017-03-10
207
+
208
+ ### Fixed
209
+
210
+ - Resource is not mandatory in bucket policy statement.
211
+
172
212
  ### [v2.2.1] - 2017-03-10
173
213
 
174
214
  #### Added
175
215
 
176
- - Allow user to append additional info to User-Agent
216
+ - Allow user to append additional info to User-Agent.
177
217
 
178
218
  ### [v2.2.0] - 2017-02-28
179
219
 
@@ -234,6 +274,10 @@ All notable changes to QingStor SDK for Ruby will be documented here.
234
274
  The Apache License (Version 2.0, January 2004).
235
275
 
236
276
  [compatible]: https://github.com/yunify/qingstor-sdk-ruby/tree/compatible
277
+ [v2.4.0]: https://github.com/yunify/qingstor-sdk-ruby/compare/v2.3.0...v2.4.0
278
+ [v2.3.0]: https://github.com/yunify/qingstor-sdk-ruby/compare/v2.2.3...v2.3.0
279
+ [v2.2.3]: https://github.com/yunify/qingstor-sdk-ruby/compare/v2.2.2...v2.2.3
280
+ [v2.2.2]: https://github.com/yunify/qingstor-sdk-ruby/compare/v2.2.1...v2.2.2
237
281
  [v2.2.1]: https://github.com/yunify/qingstor-sdk-ruby/compare/v2.2.0...v2.2.1
238
282
  [v2.2.0]: https://github.com/yunify/qingstor-sdk-ruby/compare/v2.1.1...v2.2.0
239
283
  [v2.1.1]: https://github.com/yunify/qingstor-sdk-ruby/compare/v2.1.0...v2.1.1
@@ -29,7 +29,7 @@ module QingStor
29
29
  def self.init(access_key_id, secret_access_key)
30
30
  initial_config = {
31
31
  access_key_id: access_key_id,
32
- secret_access_key: secret_access_key,
32
+ secret_access_key: secret_access_key
33
33
  }
34
34
  Config.new(initial_config)
35
35
  end
@@ -47,7 +47,7 @@ module QingStor
47
47
  end
48
48
 
49
49
  def check
50
- [:access_key_id, :secret_access_key, :host, :port, :protocol].each do |x|
50
+ %i[access_key_id secret_access_key host port protocol].each do |x|
51
51
  if !self[x] || self[x].to_s.empty?
52
52
  raise ConfigurationError, "#{x.to_sym} not specified"
53
53
  end
@@ -23,7 +23,7 @@ module QingStor
23
23
  @@level = :warn
24
24
 
25
25
  def self.set_level(level)
26
- index = %w(debug info warn error fatal).find_index level.to_s
26
+ index = %w[debug info warn error fatal].find_index level.to_s
27
27
  @@logger.level = index.nil? ? 0 : index
28
28
  @@level = level.to_sym
29
29
  end
@@ -102,6 +102,24 @@ module QingStor
102
102
  input[:request_headers][:'Content-MD5'] = Base64.encode64(Digest::MD5.digest(input[:request_body])).strip
103
103
  end
104
104
 
105
+ unless input[:request_headers][:'X-QS-MetaData'].nil?
106
+ if input[:request_headers][:'X-QS-MetaData'].is_a?(Hash) && !input[:request_headers][:'X-QS-MetaData'].empty?
107
+ prefix = 'x-qs-meta-'
108
+ input[:request_headers][:'X-QS-MetaData'].each do |k, v|
109
+ k = k.to_s
110
+ # check whether meta header has prefix
111
+ if k.downcase.start_with? prefix
112
+ suffix_len = prefix.size - k.size
113
+ k = prefix + k[suffix_len, -suffix_len]
114
+ else
115
+ k = prefix + k
116
+ end
117
+ input[:request_headers][:"#{k}"] = v
118
+ end
119
+ end
120
+ input[:request_headers].delete :'X-QS-MetaData'
121
+ end
122
+
105
123
  input[:request_headers].map do |k, v|
106
124
  input[:request_headers][k] = escape v.to_s unless v.to_s.ascii_only?
107
125
  end
@@ -127,7 +145,7 @@ module QingStor
127
145
  def self.compact(object)
128
146
  object.each do |k, v|
129
147
  object[k] = compact v if v.is_a? Hash
130
- object.delete k if v.nil? || v == ''
148
+ object.delete k if v.nil? || v == '' || v == []
131
149
  end
132
150
  object
133
151
  end
@@ -62,7 +62,10 @@ module QingStor
62
62
 
63
63
  def build
64
64
  params = input[:request_params].map { |k, v| "#{k}=#{v}" }
65
- query_string = !params.empty? ? "?#{params.join '&'}" : ''
65
+ query_string = params.join '&'
66
+ if query_string && !query_string.empty?
67
+ query_string = "#{input[:request_uri].include?('?') ? '&' : '?'}#{query_string}"
68
+ end
66
69
  self.request_url = "#{input[:request_endpoint]}#{input[:request_uri]}#{query_string}"
67
70
 
68
71
  request = new_http_request input[:request_method], request_url
@@ -77,7 +80,7 @@ module QingStor
77
80
  output['status_code'] = http_response.code.to_i
78
81
 
79
82
  http_response.each_header { |k, v| output[k.tr('-', '_')] = v }
80
- if http_response['Content-Type'] == 'application/json'
83
+ if http_response['Content-Type'].include? 'application/json'
81
84
  unless http_response.body.nil?
82
85
  JSON.parse(http_response.body).each { |k, v| output[k] = v }
83
86
  end
@@ -83,7 +83,7 @@ module QingStor
83
83
  def self.canonicalized_headers(input)
84
84
  h = {}
85
85
  input[:request_headers].each { |k, v| h[k.to_s.strip.downcase] = v.to_s.strip }
86
- h.keys.sort.reject { |k| !k.start_with? 'x-qs-' }.map { |k| "#{k}:#{h[k]}\n" }.join ''
86
+ h.keys.sort.select { |k| k.start_with? 'x-qs-' }.map { |k| "#{k}:#{h[k]}\n" }.join ''
87
87
  end
88
88
 
89
89
  def self.canonicalized_resource(input)
@@ -98,11 +98,12 @@ module QingStor
98
98
  end
99
99
 
100
100
  def self.sub_resource?(key)
101
- %w(
102
- acl cors delete mirror part_number policy stats upload_id uploads
101
+ %w[
102
+ acl append cname cors delete image lifecycle logging mirror
103
+ notification part_number policy position stats upload_id uploads
103
104
  response-expires response-cache-control response-content-type
104
105
  response-content-language response-content-encoding response-content-disposition
105
- ).include? key
106
+ ].include? key
106
107
  end
107
108
  end
108
109
  end
@@ -47,9 +47,10 @@ module QingStor
47
47
  request_elements: {
48
48
  },
49
49
  request_body: nil,
50
+
50
51
  status_code: [
51
- 204, # Bucket deleted
52
- ],
52
+ 204
53
+ ]
53
54
  }
54
55
 
55
56
  delete_bucket_input_validate input
@@ -64,6 +65,50 @@ module QingStor
64
65
 
65
66
  public
66
67
 
68
+ # delete_bucket_cname: Delete bucket CNAME setting of the bucket.
69
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/cname/delete_cname.html
70
+ def delete_cname(domain: '')
71
+ request = delete_cname_request domain: domain
72
+ request.send
73
+ end
74
+
75
+ def delete_cname_request(domain: '')
76
+ input = {
77
+ config: config,
78
+ properties: properties,
79
+ api_name: 'DELETE Bucket CNAME',
80
+ request_method: 'DELETE',
81
+ request_uri: '/<bucket-name>?cname',
82
+ request_params: {
83
+ },
84
+ request_headers: {
85
+ },
86
+ request_elements: {
87
+ 'domain' => domain
88
+ },
89
+ request_body: nil,
90
+
91
+ status_code: [
92
+ 204
93
+ ]
94
+ }
95
+
96
+ delete_bucket_cname_input_validate input
97
+ Request.new input
98
+ end
99
+
100
+ private
101
+
102
+ def delete_bucket_cname_input_validate(input)
103
+ input.deep_stringify_keys!
104
+
105
+ unless !input['request_elements']['domain'].nil? && !input['request_elements']['domain'].to_s.empty?
106
+ raise ParameterRequiredError.new('domain', 'DeleteBucketCNAMEInput')
107
+ end
108
+ end
109
+
110
+ public
111
+
67
112
  # delete_bucket_cors: Delete CORS information of the bucket.
68
113
  # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/cors/delete_cors.html
69
114
  def delete_cors
@@ -85,9 +130,10 @@ module QingStor
85
130
  request_elements: {
86
131
  },
87
132
  request_body: nil,
133
+
88
134
  status_code: [
89
- 200, # OK
90
- ],
135
+ 204
136
+ ]
91
137
  }
92
138
 
93
139
  delete_bucket_cors_input_validate input
@@ -123,9 +169,10 @@ module QingStor
123
169
  request_elements: {
124
170
  },
125
171
  request_body: nil,
172
+
126
173
  status_code: [
127
- 204, # No content
128
- ],
174
+ 204
175
+ ]
129
176
  }
130
177
 
131
178
  delete_bucket_external_mirror_input_validate input
@@ -140,6 +187,123 @@ module QingStor
140
187
 
141
188
  public
142
189
 
190
+ # delete_bucket_lifecycle: Delete Lifecycle information of the bucket.
191
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/lifecycle/delete_lifecycle.html
192
+ def delete_lifecycle
193
+ request = delete_lifecycle_request
194
+ request.send
195
+ end
196
+
197
+ def delete_lifecycle_request
198
+ input = {
199
+ config: config,
200
+ properties: properties,
201
+ api_name: 'DELETE Bucket Lifecycle',
202
+ request_method: 'DELETE',
203
+ request_uri: '/<bucket-name>?lifecycle',
204
+ request_params: {
205
+ },
206
+ request_headers: {
207
+ },
208
+ request_elements: {
209
+ },
210
+ request_body: nil,
211
+
212
+ status_code: [
213
+ 204
214
+ ]
215
+ }
216
+
217
+ delete_bucket_lifecycle_input_validate input
218
+ Request.new input
219
+ end
220
+
221
+ private
222
+
223
+ def delete_bucket_lifecycle_input_validate(input)
224
+ input.deep_stringify_keys!
225
+ end
226
+
227
+ public
228
+
229
+ # delete_bucket_logging: Delete bucket logging setting of the bucket.
230
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/logging/delete_logging.html
231
+ def delete_logging
232
+ request = delete_logging_request
233
+ request.send
234
+ end
235
+
236
+ def delete_logging_request
237
+ input = {
238
+ config: config,
239
+ properties: properties,
240
+ api_name: 'DELETE Bucket Logging',
241
+ request_method: 'DELETE',
242
+ request_uri: '/<bucket-name>?logging',
243
+ request_params: {
244
+ },
245
+ request_headers: {
246
+ },
247
+ request_elements: {
248
+ },
249
+ request_body: nil,
250
+
251
+ status_code: [
252
+ 204
253
+ ]
254
+ }
255
+
256
+ delete_bucket_logging_input_validate input
257
+ Request.new input
258
+ end
259
+
260
+ private
261
+
262
+ def delete_bucket_logging_input_validate(input)
263
+ input.deep_stringify_keys!
264
+ end
265
+
266
+ public
267
+
268
+ # delete_bucket_notification: Delete Notification information of the bucket.
269
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/notification/delete_notification.html
270
+ def delete_notification
271
+ request = delete_notification_request
272
+ request.send
273
+ end
274
+
275
+ def delete_notification_request
276
+ input = {
277
+ config: config,
278
+ properties: properties,
279
+ api_name: 'DELETE Bucket Notification',
280
+ request_method: 'DELETE',
281
+ request_uri: '/<bucket-name>?notification',
282
+ request_params: {
283
+ },
284
+ request_headers: {
285
+ },
286
+ request_elements: {
287
+ },
288
+ request_body: nil,
289
+
290
+ status_code: [
291
+ 204
292
+ ]
293
+ }
294
+
295
+ delete_bucket_notification_input_validate input
296
+ Request.new input
297
+ end
298
+
299
+ private
300
+
301
+ def delete_bucket_notification_input_validate(input)
302
+ input.deep_stringify_keys!
303
+ end
304
+
305
+ public
306
+
143
307
  # delete_bucket_policy: Delete policy information of the bucket.
144
308
  # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/policy/delete_policy.html
145
309
  def delete_policy
@@ -161,9 +325,10 @@ module QingStor
161
325
  request_elements: {
162
326
  },
163
327
  request_body: nil,
328
+
164
329
  status_code: [
165
- 204, # No content
166
- ],
330
+ 204
331
+ ]
167
332
  }
168
333
 
169
334
  delete_bucket_policy_input_validate input
@@ -178,6 +343,45 @@ module QingStor
178
343
 
179
344
  public
180
345
 
346
+ # delete_bucket_replication: Delete Replication information of the bucket.
347
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/replication/delete_replication.html
348
+ def delete_replication
349
+ request = delete_replication_request
350
+ request.send
351
+ end
352
+
353
+ def delete_replication_request
354
+ input = {
355
+ config: config,
356
+ properties: properties,
357
+ api_name: 'DELETE Bucket Replication',
358
+ request_method: 'DELETE',
359
+ request_uri: '/<bucket-name>?replication',
360
+ request_params: {
361
+ },
362
+ request_headers: {
363
+ },
364
+ request_elements: {
365
+ },
366
+ request_body: nil,
367
+
368
+ status_code: [
369
+ 204
370
+ ]
371
+ }
372
+
373
+ delete_bucket_replication_input_validate input
374
+ Request.new input
375
+ end
376
+
377
+ private
378
+
379
+ def delete_bucket_replication_input_validate(input)
380
+ input.deep_stringify_keys!
381
+ end
382
+
383
+ public
384
+
181
385
  # delete_multiple_objects: Delete multiple objects from the bucket.
182
386
  # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/delete_multiple.html
183
387
  def delete_multiple_objects(objects: [],
@@ -201,12 +405,13 @@ module QingStor
201
405
  },
202
406
  request_elements: {
203
407
  'objects' => objects,
204
- 'quiet' => quiet,
408
+ 'quiet' => quiet
205
409
  },
206
410
  request_body: nil,
411
+
207
412
  status_code: [
208
- 200, # OK
209
- ],
413
+ 200
414
+ ]
210
415
  }
211
416
 
212
417
  delete_multiple_objects_input_validate input
@@ -218,7 +423,7 @@ module QingStor
218
423
  def delete_multiple_objects_input_validate(input)
219
424
  input.deep_stringify_keys!
220
425
 
221
- unless !input['request_elements']['objects'].nil? && !input['request_elements']['objects'].to_s.empty?
426
+ unless !input['request_elements']['objects'].nil? && !input['request_elements']['objects'].empty?
222
427
  raise ParameterRequiredError.new('objects', 'DeleteMultipleObjectsInput')
223
428
  end
224
429
 
@@ -249,9 +454,10 @@ module QingStor
249
454
  request_elements: {
250
455
  },
251
456
  request_body: nil,
457
+
252
458
  status_code: [
253
- 200, # OK
254
- ],
459
+ 200
460
+ ]
255
461
  }
256
462
 
257
463
  get_bucket_acl_input_validate input
@@ -266,6 +472,57 @@ module QingStor
266
472
 
267
473
  public
268
474
 
475
+ # get_bucket_cname: Get bucket CNAME setting of the bucket.
476
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/cname/get_cname.html
477
+ def get_cname(type: '')
478
+ request = get_cname_request type: type
479
+ request.send
480
+ end
481
+
482
+ def get_cname_request(type: '')
483
+ input = {
484
+ config: config,
485
+ properties: properties,
486
+ api_name: 'GET Bucket CNAME',
487
+ request_method: 'GET',
488
+ request_uri: '/<bucket-name>?cname',
489
+ request_params: {
490
+ 'type' => type
491
+ },
492
+ request_headers: {
493
+ },
494
+ request_elements: {
495
+ },
496
+ request_body: nil,
497
+
498
+ status_code: [
499
+ 200
500
+ ]
501
+ }
502
+
503
+ get_bucket_cname_input_validate input
504
+ Request.new input
505
+ end
506
+
507
+ private
508
+
509
+ def get_bucket_cname_input_validate(input)
510
+ input.deep_stringify_keys!
511
+
512
+ if input['request_params']['type'] && !input['request_params']['type'].to_s.empty?
513
+ type_valid_values = %w[website normal]
514
+ unless type_valid_values.include? input['request_params']['type'].to_s
515
+ raise ParameterValueNotAllowedError.new(
516
+ 'type',
517
+ input['request_params']['type'],
518
+ type_valid_values,
519
+ )
520
+ end
521
+ end
522
+ end
523
+
524
+ public
525
+
269
526
  # get_bucket_cors: Get CORS information of the bucket.
270
527
  # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/cors/get_cors.html
271
528
  def get_cors
@@ -287,9 +544,10 @@ module QingStor
287
544
  request_elements: {
288
545
  },
289
546
  request_body: nil,
547
+
290
548
  status_code: [
291
- 200, # OK
292
- ],
549
+ 200
550
+ ]
293
551
  }
294
552
 
295
553
  get_bucket_cors_input_validate input
@@ -325,9 +583,10 @@ module QingStor
325
583
  request_elements: {
326
584
  },
327
585
  request_body: nil,
586
+
328
587
  status_code: [
329
- 200, # OK
330
- ],
588
+ 200
589
+ ]
331
590
  }
332
591
 
333
592
  get_bucket_external_mirror_input_validate input
@@ -342,6 +601,123 @@ module QingStor
342
601
 
343
602
  public
344
603
 
604
+ # get_bucket_lifecycle: Get Lifecycle information of the bucket.
605
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/lifecycle/get_lifecycle.html
606
+ def get_lifecycle
607
+ request = get_lifecycle_request
608
+ request.send
609
+ end
610
+
611
+ def get_lifecycle_request
612
+ input = {
613
+ config: config,
614
+ properties: properties,
615
+ api_name: 'GET Bucket Lifecycle',
616
+ request_method: 'GET',
617
+ request_uri: '/<bucket-name>?lifecycle',
618
+ request_params: {
619
+ },
620
+ request_headers: {
621
+ },
622
+ request_elements: {
623
+ },
624
+ request_body: nil,
625
+
626
+ status_code: [
627
+ 200
628
+ ]
629
+ }
630
+
631
+ get_bucket_lifecycle_input_validate input
632
+ Request.new input
633
+ end
634
+
635
+ private
636
+
637
+ def get_bucket_lifecycle_input_validate(input)
638
+ input.deep_stringify_keys!
639
+ end
640
+
641
+ public
642
+
643
+ # get_bucket_logging: Get bucket logging setting of the bucket.
644
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/logging/get_logging.html
645
+ def get_logging
646
+ request = get_logging_request
647
+ request.send
648
+ end
649
+
650
+ def get_logging_request
651
+ input = {
652
+ config: config,
653
+ properties: properties,
654
+ api_name: 'GET Bucket Logging',
655
+ request_method: 'GET',
656
+ request_uri: '/<bucket-name>?logging',
657
+ request_params: {
658
+ },
659
+ request_headers: {
660
+ },
661
+ request_elements: {
662
+ },
663
+ request_body: nil,
664
+
665
+ status_code: [
666
+ 200
667
+ ]
668
+ }
669
+
670
+ get_bucket_logging_input_validate input
671
+ Request.new input
672
+ end
673
+
674
+ private
675
+
676
+ def get_bucket_logging_input_validate(input)
677
+ input.deep_stringify_keys!
678
+ end
679
+
680
+ public
681
+
682
+ # get_bucket_notification: Get Notification information of the bucket.
683
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/notification/get_notification.html
684
+ def get_notification
685
+ request = get_notification_request
686
+ request.send
687
+ end
688
+
689
+ def get_notification_request
690
+ input = {
691
+ config: config,
692
+ properties: properties,
693
+ api_name: 'GET Bucket Notification',
694
+ request_method: 'GET',
695
+ request_uri: '/<bucket-name>?notification',
696
+ request_params: {
697
+ },
698
+ request_headers: {
699
+ },
700
+ request_elements: {
701
+ },
702
+ request_body: nil,
703
+
704
+ status_code: [
705
+ 200
706
+ ]
707
+ }
708
+
709
+ get_bucket_notification_input_validate input
710
+ Request.new input
711
+ end
712
+
713
+ private
714
+
715
+ def get_bucket_notification_input_validate(input)
716
+ input.deep_stringify_keys!
717
+ end
718
+
719
+ public
720
+
345
721
  # get_bucket_policy: Get policy information of the bucket.
346
722
  # Documentation URL: https://https://docs.qingcloud.com/qingstor/api/bucket/policy/get_policy.html
347
723
  def get_policy
@@ -349,13 +725,52 @@ module QingStor
349
725
  request.send
350
726
  end
351
727
 
352
- def get_policy_request
728
+ def get_policy_request
729
+ input = {
730
+ config: config,
731
+ properties: properties,
732
+ api_name: 'GET Bucket Policy',
733
+ request_method: 'GET',
734
+ request_uri: '/<bucket-name>?policy',
735
+ request_params: {
736
+ },
737
+ request_headers: {
738
+ },
739
+ request_elements: {
740
+ },
741
+ request_body: nil,
742
+
743
+ status_code: [
744
+ 200
745
+ ]
746
+ }
747
+
748
+ get_bucket_policy_input_validate input
749
+ Request.new input
750
+ end
751
+
752
+ private
753
+
754
+ def get_bucket_policy_input_validate(input)
755
+ input.deep_stringify_keys!
756
+ end
757
+
758
+ public
759
+
760
+ # get_bucket_replication: Get Replication information of the bucket.
761
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/replication/get_replication.html
762
+ def get_replication
763
+ request = get_replication_request
764
+ request.send
765
+ end
766
+
767
+ def get_replication_request
353
768
  input = {
354
769
  config: config,
355
770
  properties: properties,
356
- api_name: 'GET Bucket Policy',
771
+ api_name: 'GET Bucket Replication',
357
772
  request_method: 'GET',
358
- request_uri: '/<bucket-name>?policy',
773
+ request_uri: '/<bucket-name>?replication',
359
774
  request_params: {
360
775
  },
361
776
  request_headers: {
@@ -363,18 +778,19 @@ module QingStor
363
778
  request_elements: {
364
779
  },
365
780
  request_body: nil,
781
+
366
782
  status_code: [
367
- 200, # OK
368
- ],
783
+ 200
784
+ ]
369
785
  }
370
786
 
371
- get_bucket_policy_input_validate input
787
+ get_bucket_replication_input_validate input
372
788
  Request.new input
373
789
  end
374
790
 
375
791
  private
376
792
 
377
- def get_bucket_policy_input_validate(input)
793
+ def get_bucket_replication_input_validate(input)
378
794
  input.deep_stringify_keys!
379
795
  end
380
796
 
@@ -401,9 +817,10 @@ module QingStor
401
817
  request_elements: {
402
818
  },
403
819
  request_body: nil,
820
+
404
821
  status_code: [
405
- 200, # OK
406
- ],
822
+ 200
823
+ ]
407
824
  }
408
825
 
409
826
  get_bucket_statistics_input_validate input
@@ -439,9 +856,10 @@ module QingStor
439
856
  request_elements: {
440
857
  },
441
858
  request_body: nil,
859
+
442
860
  status_code: [
443
- 200, # OK
444
- ],
861
+ 200
862
+ ]
445
863
  }
446
864
 
447
865
  head_bucket_input_validate input
@@ -459,20 +877,23 @@ module QingStor
459
877
  # list_multipart_uploads: List multipart uploads in the bucket.
460
878
  # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/list_multipart_uploads.html
461
879
  def list_multipart_uploads(delimiter: '',
880
+ key_marker: '',
462
881
  limit: nil,
463
- marker: '',
464
- prefix: '')
465
- request = list_multipart_uploads_request delimiter: delimiter,
466
- limit: limit,
467
- marker: marker,
468
- prefix: prefix
882
+ prefix: '',
883
+ upload_id_marker: '')
884
+ request = list_multipart_uploads_request delimiter: delimiter,
885
+ key_marker: key_marker,
886
+ limit: limit,
887
+ prefix: prefix,
888
+ upload_id_marker: upload_id_marker
469
889
  request.send
470
890
  end
471
891
 
472
892
  def list_multipart_uploads_request(delimiter: '',
893
+ key_marker: '',
473
894
  limit: nil,
474
- marker: '',
475
- prefix: '')
895
+ prefix: '',
896
+ upload_id_marker: '')
476
897
  input = {
477
898
  config: config,
478
899
  properties: properties,
@@ -480,19 +901,21 @@ module QingStor
480
901
  request_method: 'GET',
481
902
  request_uri: '/<bucket-name>?uploads',
482
903
  request_params: {
483
- 'delimiter' => delimiter,
484
- 'limit' => limit,
485
- 'marker' => marker,
486
- 'prefix' => prefix,
904
+ 'delimiter' => delimiter,
905
+ 'key_marker' => key_marker,
906
+ 'limit' => limit,
907
+ 'prefix' => prefix,
908
+ 'upload_id_marker' => upload_id_marker
487
909
  },
488
910
  request_headers: {
489
911
  },
490
912
  request_elements: {
491
913
  },
492
914
  request_body: nil,
915
+
493
916
  status_code: [
494
- 200, # OK
495
- ],
917
+ 200
918
+ ]
496
919
  }
497
920
 
498
921
  list_multipart_uploads_input_validate input
@@ -534,16 +957,17 @@ module QingStor
534
957
  'delimiter' => delimiter,
535
958
  'limit' => limit,
536
959
  'marker' => marker,
537
- 'prefix' => prefix,
960
+ 'prefix' => prefix
538
961
  },
539
962
  request_headers: {
540
963
  },
541
964
  request_elements: {
542
965
  },
543
966
  request_body: nil,
967
+
544
968
  status_code: [
545
- 200, # OK
546
- ],
969
+ 200
970
+ ]
547
971
  }
548
972
 
549
973
  list_objects_input_validate input
@@ -579,9 +1003,10 @@ module QingStor
579
1003
  request_elements: {
580
1004
  },
581
1005
  request_body: nil,
1006
+
582
1007
  status_code: [
583
- 201, # Bucket created
584
- ],
1008
+ 201
1009
+ ]
585
1010
  }
586
1011
 
587
1012
  put_bucket_input_validate input
@@ -615,12 +1040,13 @@ module QingStor
615
1040
  request_headers: {
616
1041
  },
617
1042
  request_elements: {
618
- 'acl' => acl,
1043
+ 'acl' => acl
619
1044
  },
620
1045
  request_body: nil,
1046
+
621
1047
  status_code: [
622
- 200, # OK
623
- ],
1048
+ 200
1049
+ ]
624
1050
  }
625
1051
 
626
1052
  put_bucket_acl_input_validate input
@@ -632,7 +1058,7 @@ module QingStor
632
1058
  def put_bucket_acl_input_validate(input)
633
1059
  input.deep_stringify_keys!
634
1060
 
635
- unless !input['request_elements']['acl'].nil? && !input['request_elements']['acl'].to_s.empty?
1061
+ unless !input['request_elements']['acl'].nil? && !input['request_elements']['acl'].empty?
636
1062
  raise ParameterRequiredError.new('acl', 'PutBucketACLInput')
637
1063
  end
638
1064
 
@@ -644,7 +1070,7 @@ module QingStor
644
1070
  end
645
1071
 
646
1072
  if x['grantee']['type'] && !x['grantee']['type'].to_s.empty?
647
- type_valid_values = %w(user group)
1073
+ type_valid_values = %w[user group]
648
1074
  unless type_valid_values.include? x['grantee']['type'].to_s
649
1075
  raise ParameterValueNotAllowedError.new(
650
1076
  'type',
@@ -656,15 +1082,19 @@ module QingStor
656
1082
 
657
1083
  end
658
1084
 
659
- raise ParameterRequiredError.new('grantee', 'acl') if x['grantee'].nil?
1085
+ if x['grantee'].nil?
1086
+ raise ParameterRequiredError.new('grantee', 'acl')
1087
+ end
660
1088
 
661
1089
  unless !x['permission'].nil? && !x['permission'].to_s.empty?
662
1090
  raise ParameterRequiredError.new('permission', 'acl')
663
1091
  end
664
1092
 
665
1093
  next unless x['permission'] && !x['permission'].to_s.empty?
666
- permission_valid_values = %w(READ WRITE FULL_CONTROL)
1094
+
1095
+ permission_valid_values = %w[READ WRITE FULL_CONTROL]
667
1096
  next if permission_valid_values.include? x['permission'].to_s
1097
+
668
1098
  raise ParameterValueNotAllowedError.new(
669
1099
  'permission',
670
1100
  x['permission'],
@@ -675,6 +1105,65 @@ module QingStor
675
1105
 
676
1106
  public
677
1107
 
1108
+ # put_bucket_cname: Set bucket CNAME of the bucket.
1109
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/cname/put_cname.html
1110
+ def put_cname(domain: '',
1111
+ type: '')
1112
+ request = put_cname_request domain: domain,
1113
+ type: type
1114
+ request.send
1115
+ end
1116
+
1117
+ def put_cname_request(domain: '',
1118
+ type: '')
1119
+ input = {
1120
+ config: config,
1121
+ properties: properties,
1122
+ api_name: 'PUT Bucket CNAME',
1123
+ request_method: 'PUT',
1124
+ request_uri: '/<bucket-name>?cname',
1125
+ request_params: {
1126
+ },
1127
+ request_headers: {
1128
+ },
1129
+ request_elements: {
1130
+ 'domain' => domain,
1131
+ 'type' => type
1132
+ },
1133
+ request_body: nil,
1134
+
1135
+ status_code: [
1136
+ 200
1137
+ ]
1138
+ }
1139
+
1140
+ put_bucket_cname_input_validate input
1141
+ Request.new input
1142
+ end
1143
+
1144
+ private
1145
+
1146
+ def put_bucket_cname_input_validate(input)
1147
+ input.deep_stringify_keys!
1148
+
1149
+ unless !input['request_elements']['domain'].nil? && !input['request_elements']['domain'].to_s.empty?
1150
+ raise ParameterRequiredError.new('domain', 'PutBucketCNAMEInput')
1151
+ end
1152
+
1153
+ if input['request_elements']['type'] && !input['request_elements']['type'].to_s.empty?
1154
+ type_valid_values = %w[normal website]
1155
+ unless type_valid_values.include? input['request_elements']['type'].to_s
1156
+ raise ParameterValueNotAllowedError.new(
1157
+ 'type',
1158
+ input['request_elements']['type'],
1159
+ type_valid_values,
1160
+ )
1161
+ end
1162
+ end
1163
+ end
1164
+
1165
+ public
1166
+
678
1167
  # put_bucket_cors: Set CORS information of the bucket.
679
1168
  # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/cors/put_cors.html
680
1169
  def put_cors(cors_rules: [])
@@ -694,12 +1183,13 @@ module QingStor
694
1183
  request_headers: {
695
1184
  },
696
1185
  request_elements: {
697
- 'cors_rules' => cors_rules,
1186
+ 'cors_rules' => cors_rules
698
1187
  },
699
1188
  request_body: nil,
1189
+
700
1190
  status_code: [
701
- 200, # OK
702
- ],
1191
+ 200
1192
+ ]
703
1193
  }
704
1194
 
705
1195
  put_bucket_cors_input_validate input
@@ -711,12 +1201,12 @@ module QingStor
711
1201
  def put_bucket_cors_input_validate(input)
712
1202
  input.deep_stringify_keys!
713
1203
 
714
- unless !input['request_elements']['cors_rules'].nil? && !input['request_elements']['cors_rules'].to_s.empty?
1204
+ unless !input['request_elements']['cors_rules'].nil? && !input['request_elements']['cors_rules'].empty?
715
1205
  raise ParameterRequiredError.new('cors_rules', 'PutBucketCORSInput')
716
1206
  end
717
1207
 
718
1208
  input['request_elements']['cors_rules'].each do |x|
719
- unless !x['allowed_methods'].nil? && !x['allowed_methods'].to_s.empty?
1209
+ unless !x['allowed_methods'].nil? && !x['allowed_methods'].empty?
720
1210
  raise ParameterRequiredError.new('allowed_methods', 'cors_rule')
721
1211
  end
722
1212
 
@@ -747,12 +1237,13 @@ module QingStor
747
1237
  request_headers: {
748
1238
  },
749
1239
  request_elements: {
750
- 'source_site' => source_site,
1240
+ 'source_site' => source_site
751
1241
  },
752
1242
  request_body: nil,
1243
+
753
1244
  status_code: [
754
- 200, # OK
755
- ],
1245
+ 200
1246
+ ]
756
1247
  }
757
1248
 
758
1249
  put_bucket_external_mirror_input_validate input
@@ -771,6 +1262,230 @@ module QingStor
771
1262
 
772
1263
  public
773
1264
 
1265
+ # put_bucket_lifecycle: Set Lifecycle information of the bucket.
1266
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/lifecycle/put_lifecycle.html
1267
+ def put_lifecycle(rule: [])
1268
+ request = put_lifecycle_request rule: rule
1269
+ request.send
1270
+ end
1271
+
1272
+ def put_lifecycle_request(rule: [])
1273
+ input = {
1274
+ config: config,
1275
+ properties: properties,
1276
+ api_name: 'PUT Bucket Lifecycle',
1277
+ request_method: 'PUT',
1278
+ request_uri: '/<bucket-name>?lifecycle',
1279
+ request_params: {
1280
+ },
1281
+ request_headers: {
1282
+ },
1283
+ request_elements: {
1284
+ 'rule' => rule
1285
+ },
1286
+ request_body: nil,
1287
+
1288
+ status_code: [
1289
+ 200
1290
+ ]
1291
+ }
1292
+
1293
+ put_bucket_lifecycle_input_validate input
1294
+ Request.new input
1295
+ end
1296
+
1297
+ private
1298
+
1299
+ def put_bucket_lifecycle_input_validate(input)
1300
+ input.deep_stringify_keys!
1301
+
1302
+ unless !input['request_elements']['rule'].nil? && !input['request_elements']['rule'].empty?
1303
+ raise ParameterRequiredError.new('rule', 'PutBucketLifecycleInput')
1304
+ end
1305
+
1306
+ input['request_elements']['rule'].each do |x|
1307
+ unless x['abort_incomplete_multipart_upload'].nil?
1308
+
1309
+ unless !x['abort_incomplete_multipart_upload']['days_after_initiation'].nil? && !x['abort_incomplete_multipart_upload']['days_after_initiation'].to_s.empty?
1310
+ raise ParameterRequiredError.new('days_after_initiation', 'abort_incomplete_multipart_upload')
1311
+ end
1312
+
1313
+ end
1314
+
1315
+ unless x['expiration'].nil?
1316
+
1317
+ end
1318
+
1319
+ unless x['filter'].nil?
1320
+
1321
+ unless !x['filter']['prefix'].nil? && !x['filter']['prefix'].to_s.empty?
1322
+ raise ParameterRequiredError.new('prefix', 'filter')
1323
+ end
1324
+
1325
+ end
1326
+
1327
+ if x['filter'].nil?
1328
+ raise ParameterRequiredError.new('filter', 'rule')
1329
+ end
1330
+
1331
+ unless !x['id'].nil? && !x['id'].to_s.empty?
1332
+ raise ParameterRequiredError.new('id', 'rule')
1333
+ end
1334
+
1335
+ unless !x['status'].nil? && !x['status'].to_s.empty?
1336
+ raise ParameterRequiredError.new('status', 'rule')
1337
+ end
1338
+
1339
+ if x['status'] && !x['status'].to_s.empty?
1340
+ status_valid_values = %w[enabled disabled]
1341
+ unless status_valid_values.include? x['status'].to_s
1342
+ raise ParameterValueNotAllowedError.new(
1343
+ 'status',
1344
+ x['status'],
1345
+ status_valid_values,
1346
+ )
1347
+ end
1348
+ end
1349
+
1350
+ next if x['transition'].nil?
1351
+
1352
+ unless !x['transition']['storage_class'].nil? && !x['transition']['storage_class'].to_s.empty?
1353
+ raise ParameterRequiredError.new('storage_class', 'transition')
1354
+ end
1355
+ end
1356
+ end
1357
+
1358
+ public
1359
+
1360
+ # put_bucket_logging: Set bucket logging of the bucket.
1361
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/logging/put_logging.html
1362
+ def put_logging(target_bucket: '',
1363
+ target_prefix: '')
1364
+ request = put_logging_request target_bucket: target_bucket,
1365
+ target_prefix: target_prefix
1366
+ request.send
1367
+ end
1368
+
1369
+ def put_logging_request(target_bucket: '',
1370
+ target_prefix: '')
1371
+ input = {
1372
+ config: config,
1373
+ properties: properties,
1374
+ api_name: 'PUT Bucket Logging',
1375
+ request_method: 'PUT',
1376
+ request_uri: '/<bucket-name>?logging',
1377
+ request_params: {
1378
+ },
1379
+ request_headers: {
1380
+ },
1381
+ request_elements: {
1382
+ 'target_bucket' => target_bucket,
1383
+ 'target_prefix' => target_prefix
1384
+ },
1385
+ request_body: nil,
1386
+
1387
+ status_code: [
1388
+ 200
1389
+ ]
1390
+ }
1391
+
1392
+ put_bucket_logging_input_validate input
1393
+ Request.new input
1394
+ end
1395
+
1396
+ private
1397
+
1398
+ def put_bucket_logging_input_validate(input)
1399
+ input.deep_stringify_keys!
1400
+
1401
+ unless !input['request_elements']['target_bucket'].nil? && !input['request_elements']['target_bucket'].to_s.empty?
1402
+ raise ParameterRequiredError.new('target_bucket', 'PutBucketLoggingInput')
1403
+ end
1404
+
1405
+ unless !input['request_elements']['target_prefix'].nil? && !input['request_elements']['target_prefix'].to_s.empty?
1406
+ raise ParameterRequiredError.new('target_prefix', 'PutBucketLoggingInput')
1407
+ end
1408
+ end
1409
+
1410
+ public
1411
+
1412
+ # put_bucket_notification: Set Notification information of the bucket.
1413
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/notification/put_notification.html
1414
+ def put_notification(notifications: [])
1415
+ request = put_notification_request notifications: notifications
1416
+ request.send
1417
+ end
1418
+
1419
+ def put_notification_request(notifications: [])
1420
+ input = {
1421
+ config: config,
1422
+ properties: properties,
1423
+ api_name: 'PUT Bucket Notification',
1424
+ request_method: 'PUT',
1425
+ request_uri: '/<bucket-name>?notification',
1426
+ request_params: {
1427
+ },
1428
+ request_headers: {
1429
+ },
1430
+ request_elements: {
1431
+ 'notifications' => notifications
1432
+ },
1433
+ request_body: nil,
1434
+
1435
+ status_code: [
1436
+ 200
1437
+ ]
1438
+ }
1439
+
1440
+ put_bucket_notification_input_validate input
1441
+ Request.new input
1442
+ end
1443
+
1444
+ private
1445
+
1446
+ def put_bucket_notification_input_validate(input)
1447
+ input.deep_stringify_keys!
1448
+
1449
+ unless !input['request_elements']['notifications'].nil? && !input['request_elements']['notifications'].empty?
1450
+ raise ParameterRequiredError.new('notifications', 'PutBucketNotificationInput')
1451
+ end
1452
+
1453
+ input['request_elements']['notifications'].each do |x|
1454
+ unless !x['cloudfunc'].nil? && !x['cloudfunc'].to_s.empty?
1455
+ raise ParameterRequiredError.new('cloudfunc', 'notification')
1456
+ end
1457
+
1458
+ if x['cloudfunc'] && !x['cloudfunc'].to_s.empty?
1459
+ cloudfunc_valid_values = %w[tupu-porn notifier image]
1460
+ unless cloudfunc_valid_values.include? x['cloudfunc'].to_s
1461
+ raise ParameterValueNotAllowedError.new(
1462
+ 'cloudfunc',
1463
+ x['cloudfunc'],
1464
+ cloudfunc_valid_values,
1465
+ )
1466
+ end
1467
+ end
1468
+
1469
+ unless x['cloudfunc_args'].nil?
1470
+
1471
+ unless !x['cloudfunc_args']['action'].nil? && !x['cloudfunc_args']['action'].to_s.empty?
1472
+ raise ParameterRequiredError.new('action', 'cloudfunc_args')
1473
+ end
1474
+
1475
+ end
1476
+
1477
+ unless !x['event_types'].nil? && !x['event_types'].empty?
1478
+ raise ParameterRequiredError.new('event_types', 'notification')
1479
+ end
1480
+
1481
+ unless !x['id'].nil? && !x['id'].to_s.empty?
1482
+ raise ParameterRequiredError.new('id', 'notification')
1483
+ end
1484
+ end
1485
+ end
1486
+
1487
+ public
1488
+
774
1489
  # put_bucket_policy: Set policy information of the bucket.
775
1490
  # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/policy/put_policy.html
776
1491
  def put_policy(statement: [])
@@ -790,12 +1505,13 @@ module QingStor
790
1505
  request_headers: {
791
1506
  },
792
1507
  request_elements: {
793
- 'statement' => statement,
1508
+ 'statement' => statement
794
1509
  },
795
1510
  request_body: nil,
1511
+
796
1512
  status_code: [
797
- 200, # OK
798
- ],
1513
+ 200
1514
+ ]
799
1515
  }
800
1516
 
801
1517
  put_bucket_policy_input_validate input
@@ -807,12 +1523,12 @@ module QingStor
807
1523
  def put_bucket_policy_input_validate(input)
808
1524
  input.deep_stringify_keys!
809
1525
 
810
- unless !input['request_elements']['statement'].nil? && !input['request_elements']['statement'].to_s.empty?
1526
+ unless !input['request_elements']['statement'].nil? && !input['request_elements']['statement'].empty?
811
1527
  raise ParameterRequiredError.new('statement', 'PutBucketPolicyInput')
812
1528
  end
813
1529
 
814
1530
  input['request_elements']['statement'].each do |x|
815
- unless !x['action'].nil? && !x['action'].to_s.empty?
1531
+ unless !x['action'].nil? && !x['action'].empty?
816
1532
  raise ParameterRequiredError.new('action', 'statement')
817
1533
  end
818
1534
 
@@ -845,7 +1561,7 @@ module QingStor
845
1561
  end
846
1562
 
847
1563
  if x['effect'] && !x['effect'].to_s.empty?
848
- effect_valid_values = %w(allow deny)
1564
+ effect_valid_values = %w[allow deny]
849
1565
  unless effect_valid_values.include? x['effect'].to_s
850
1566
  raise ParameterValueNotAllowedError.new(
851
1567
  'effect',
@@ -859,13 +1575,112 @@ module QingStor
859
1575
  raise ParameterRequiredError.new('id', 'statement')
860
1576
  end
861
1577
 
862
- unless !x['resource'].nil? && !x['resource'].to_s.empty?
863
- raise ParameterRequiredError.new('resource', 'statement')
1578
+ unless !x['user'].nil? && !x['user'].empty?
1579
+ raise ParameterRequiredError.new('user', 'statement')
864
1580
  end
1581
+ end
1582
+ end
865
1583
 
866
- unless !x['user'].nil? && !x['user'].to_s.empty?
867
- raise ParameterRequiredError.new('user', 'statement')
1584
+ public
1585
+
1586
+ # put_bucket_replication: Set Replication information of the bucket.
1587
+ # Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/replication/put_replication.html
1588
+ def put_replication(rules: [])
1589
+ request = put_replication_request rules: rules
1590
+ request.send
1591
+ end
1592
+
1593
+ def put_replication_request(rules: [])
1594
+ input = {
1595
+ config: config,
1596
+ properties: properties,
1597
+ api_name: 'PUT Bucket Replication',
1598
+ request_method: 'PUT',
1599
+ request_uri: '/<bucket-name>?replication',
1600
+ request_params: {
1601
+ },
1602
+ request_headers: {
1603
+ },
1604
+ request_elements: {
1605
+ 'rules' => rules
1606
+ },
1607
+ request_body: nil,
1608
+
1609
+ status_code: [
1610
+ 200
1611
+ ]
1612
+ }
1613
+
1614
+ put_bucket_replication_input_validate input
1615
+ Request.new input
1616
+ end
1617
+
1618
+ private
1619
+
1620
+ def put_bucket_replication_input_validate(input)
1621
+ input.deep_stringify_keys!
1622
+
1623
+ unless !input['request_elements']['rules'].nil? && !input['request_elements']['rules'].empty?
1624
+ raise ParameterRequiredError.new('rules', 'PutBucketReplicationInput')
1625
+ end
1626
+
1627
+ input['request_elements']['rules'].each do |x|
1628
+ if x['delete_marker'] && !x['delete_marker'].to_s.empty?
1629
+ delete_marker_valid_values = %w[enabled disabled]
1630
+ unless delete_marker_valid_values.include? x['delete_marker'].to_s
1631
+ raise ParameterValueNotAllowedError.new(
1632
+ 'delete_marker',
1633
+ x['delete_marker'],
1634
+ delete_marker_valid_values,
1635
+ )
1636
+ end
1637
+ end
1638
+
1639
+ unless x['destination'].nil?
1640
+
1641
+ unless !x['destination']['bucket'].nil? && !x['destination']['bucket'].to_s.empty?
1642
+ raise ParameterRequiredError.new('bucket', 'destination')
1643
+ end
1644
+
1645
+ end
1646
+
1647
+ if x['destination'].nil?
1648
+ raise ParameterRequiredError.new('destination', 'rules')
1649
+ end
1650
+
1651
+ unless x['filters'].nil?
1652
+
1653
+ end
1654
+
1655
+ if x['filters'].nil?
1656
+ raise ParameterRequiredError.new('filters', 'rules')
1657
+ end
1658
+
1659
+ unless !x['id'].nil? && !x['id'].to_s.empty?
1660
+ raise ParameterRequiredError.new('id', 'rules')
1661
+ end
1662
+
1663
+ if x['status'] && !x['status'].to_s.empty?
1664
+ status_valid_values = %w[enabled disabled]
1665
+ unless status_valid_values.include? x['status'].to_s
1666
+ raise ParameterValueNotAllowedError.new(
1667
+ 'status',
1668
+ x['status'],
1669
+ status_valid_values,
1670
+ )
1671
+ end
868
1672
  end
1673
+
1674
+ next unless x['sync_marker'] && !x['sync_marker'].to_s.empty?
1675
+
1676
+ sync_marker_valid_values = %w[enabled disabled]
1677
+ next if sync_marker_valid_values.include? x['sync_marker'].to_s
1678
+
1679
+ raise ParameterValueNotAllowedError.new(
1680
+ 'sync_marker',
1681
+ x['sync_marker'],
1682
+ sync_marker_valid_values,
1683
+ )
869
1684
  end
870
1685
  end
871
1686