qingstor-sdk 1.9.3 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -48
- data/lib/qingstor/sdk/general/config.rb +0 -17
- data/lib/qingstor/sdk/general/default/config.yaml +5 -8
- data/lib/qingstor/sdk/general/error.rb +1 -11
- data/lib/qingstor/sdk/request/preprocessor.rb +3 -44
- data/lib/qingstor/sdk/request/request.rb +17 -9
- data/lib/qingstor/sdk/request/signer.rb +15 -8
- data/lib/qingstor/sdk/service/bucket.rb +116 -234
- data/lib/qingstor/sdk/service/object.rb +246 -218
- data/lib/qingstor/sdk/service/qingstor.rb +6 -11
- data/lib/qingstor/sdk/version.rb +1 -1
- metadata +13 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33359165658b13aa899f8ffdbb30f2562f9c0db9
|
4
|
+
data.tar.gz: ccb554de7a1c9c00ee90963655cb6c877dbe74ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8752923dafeeffbb74d46f4cc0054d23e7a066640f5762a00ad9732d27eb99055672dd01b958d3f7fd043b9cb8cdd0eea1b11767978650d835fb26f7da38a484
|
7
|
+
data.tar.gz: 00ffd9672d3f59322029a0afd5fe958b25c704f00deba2f80570e7d5c2535ee957aefd0ab216744b7f59e47ec21ffc8c5ad1b61f6c3bbaaa757426550ed482c5
|
data/README.md
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
# QingStor::SDK
|
2
2
|
|
3
|
+
<span style="display: inline-block">
|
3
4
|
[![Build Status](https://travis-ci.org/yunify/qingstor-sdk-ruby.svg?branch=master)](https://travis-ci.org/yunify/qingstor-sdk-ruby)
|
4
5
|
[![Gem Version](https://badge.fury.io/rb/qingstor-sdk.svg)](http://badge.fury.io/rb/qingstor-sdk)
|
5
6
|
[![API Reference](http://img.shields.io/badge/api-reference-green.svg)](https://docs.qingcloud.com/qingstor/)
|
6
7
|
[![License](http://img.shields.io/badge/license-apache%20v2-blue.svg)](https://github.com/yunify/qingstor-sdk-ruby/blob/master/LICENSE)
|
8
|
+
</span>
|
7
9
|
|
8
10
|
The official QingStor SDK for Ruby programming language.
|
9
11
|
|
10
12
|
## Installation
|
11
13
|
|
12
|
-
|
14
|
+
This Gem uses Ruby's _keyword arguments_ feature, thus Ruby 2.1.5 or higher is
|
15
|
+
required. See [this article](https://robots.thoughtbot.com/ruby-2-keyword-arguments)
|
16
|
+
for more details about _keyword arguments_.
|
13
17
|
|
14
18
|
### Install from RubyGems
|
15
19
|
|
@@ -36,7 +40,7 @@ $ bundle install
|
|
36
40
|
Get code from GitHub:
|
37
41
|
|
38
42
|
``` bash
|
39
|
-
$ git clone git@github.com
|
43
|
+
$ git clone git@https://github.com/yunify/qingstor-sdk-ruby.git
|
40
44
|
```
|
41
45
|
|
42
46
|
Build and install with bundler:
|
@@ -62,8 +66,8 @@ otherwise.
|
|
62
66
|
___API Access Key Example:___
|
63
67
|
|
64
68
|
``` yaml
|
65
|
-
access_key_id: '
|
66
|
-
secret_access_key: '
|
69
|
+
access_key_id: 'WMAGPAJBJRKQEBRCEADPWMAGPAJBJRK'
|
70
|
+
secret_access_key: 'Qkk89OcoIaMVZ0iOfnfivjxL7W5o7oOumMvvUiuF'
|
67
71
|
```
|
68
72
|
|
69
73
|
### Code Example
|
@@ -160,40 +164,6 @@ connection_retries: 3
|
|
160
164
|
log_level: 'warn'
|
161
165
|
```
|
162
166
|
|
163
|
-
## Change Log
|
164
|
-
All notable changes to QingStor SDK for Ruby will be documented here.
|
165
|
-
|
166
|
-
### [v1.9.3] - 2017-03-15
|
167
|
-
|
168
|
-
#### Added
|
169
|
-
|
170
|
-
- Allow user to append additional info to User-Agent.
|
171
|
-
- Add request parameters for GET Object.
|
172
|
-
- Add IP address conditions for bucket policy.
|
173
|
-
|
174
|
-
### Fixed
|
175
|
-
|
176
|
-
- Resource is not mandatory in bucket policy statement.
|
177
|
-
|
178
|
-
### [v1.9.2] - 2017-01-23
|
179
|
-
|
180
|
-
#### Fixed
|
181
|
-
|
182
|
-
- Fix request builder.
|
183
|
-
- Fix dependencies.
|
184
|
-
|
185
|
-
### [v1.9.1] - 2017-01-16
|
186
|
-
|
187
|
-
#### Fixed
|
188
|
-
|
189
|
-
- Fix request signer.
|
190
|
-
|
191
|
-
### v1.9.0 - 2017-01-13
|
192
|
-
|
193
|
-
#### Changed
|
194
|
-
|
195
|
-
- Be compatible with Ruby v1.9.x.
|
196
|
-
|
197
167
|
## Reference Documentations
|
198
168
|
|
199
169
|
- [QingStor Documentation](https://docs.qingcloud.com/qingstor/index.html)
|
@@ -202,17 +172,8 @@ All notable changes to QingStor SDK for Ruby will be documented here.
|
|
202
172
|
|
203
173
|
## Contributing
|
204
174
|
|
205
|
-
|
206
|
-
2. Create your feature branch (`git checkout -b new-feature`)
|
207
|
-
3. Commit your changes (`git commit -asm 'Add some feature'`)
|
208
|
-
4. Push to the branch (`git push origin new-feature`)
|
209
|
-
5. Create a new Pull Request
|
175
|
+
This repository is automatically generated, please contribute to [`Snips`](https://github.com/yunify/snips) instead.
|
210
176
|
|
211
177
|
## LICENSE
|
212
178
|
|
213
179
|
The Apache License (Version 2.0, January 2004).
|
214
|
-
|
215
|
-
[master]: https://github.com/yunify/qingstor-sdk-ruby/tree/master
|
216
|
-
[v1.9.3]: https://github.com/yunify/qingstor-sdk-ruby/compare/v1.9.2...v1.9.3
|
217
|
-
[v1.9.2]: https://github.com/yunify/qingstor-sdk-ruby/compare/v1.9.1...v1.9.2
|
218
|
-
[v1.9.1]: https://github.com/yunify/qingstor-sdk-ruby/compare/v1.9.0...v1.9.1
|
@@ -46,23 +46,6 @@ module QingStor
|
|
46
46
|
self
|
47
47
|
end
|
48
48
|
|
49
|
-
def check
|
50
|
-
[:access_key_id, :secret_access_key, :host, :port, :protocol].each do |x|
|
51
|
-
if !self[x] || self[x].to_s.empty?
|
52
|
-
raise ConfigurationError, "#{x.to_sym} not specified"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
if self[:additional_user_agent] && !self[:additional_user_agent].empty?
|
56
|
-
self[:additional_user_agent].each_byte do |x|
|
57
|
-
# Allow space(32) to ~(126) in ASCII Table, exclude "(34).
|
58
|
-
if x < 32 || x > 126 || x == 32 || x == 34
|
59
|
-
raise ConfigurationError, 'additional User-Agent contains characters that not allowed'
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
self
|
64
|
-
end
|
65
|
-
|
66
49
|
def load_default_config
|
67
50
|
load_config_from_file Contract::DEFAULT_CONFIG_FILEPATH
|
68
51
|
end
|
@@ -1,15 +1,12 @@
|
|
1
1
|
# QingStor services configuration
|
2
2
|
|
3
|
-
#access_key_id: ACCESS_KEY_ID
|
4
|
-
#secret_access_key: SECRET_ACCESS_KEY
|
3
|
+
#access_key_id: 'ACCESS_KEY_ID'
|
4
|
+
#secret_access_key: 'SECRET_ACCESS_KEY'
|
5
5
|
|
6
|
-
host: qingstor.com
|
6
|
+
host: 'qingstor.com'
|
7
7
|
port: 443
|
8
|
-
protocol: https
|
8
|
+
protocol: 'https'
|
9
9
|
connection_retries: 3
|
10
10
|
|
11
|
-
# Additional User-Agent
|
12
|
-
additional_user_agent: ""
|
13
|
-
|
14
11
|
# Valid log levels are "debug", "info", "warn", "error", and "fatal".
|
15
|
-
log_level: warn
|
12
|
+
log_level: 'warn'
|
@@ -14,21 +14,11 @@
|
|
14
14
|
# | limitations under the License.
|
15
15
|
# +-------------------------------------------------------------------------
|
16
16
|
|
17
|
-
module
|
17
|
+
module QingCloud
|
18
18
|
module SDK
|
19
19
|
class SDKError < StandardError
|
20
20
|
end
|
21
21
|
|
22
|
-
class ConfigurationError < SDKError
|
23
|
-
def initialize(error_message)
|
24
|
-
@error_message = error_message
|
25
|
-
end
|
26
|
-
|
27
|
-
def message
|
28
|
-
"configuration is not valid, #{@error_message}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
22
|
class NetworkError < SDKError
|
33
23
|
end
|
34
24
|
|
@@ -14,10 +14,6 @@
|
|
14
14
|
# | limitations under the License.
|
15
15
|
# +-------------------------------------------------------------------------
|
16
16
|
|
17
|
-
require 'cgi'
|
18
|
-
require 'base64'
|
19
|
-
require 'digest'
|
20
|
-
|
21
17
|
require 'active_support/core_ext/hash/keys'
|
22
18
|
require 'mimemagic'
|
23
19
|
|
@@ -30,7 +26,6 @@ module QingStor
|
|
30
26
|
input[:request_uri] = request_uri input
|
31
27
|
input[:request_body] = request_body input
|
32
28
|
input[:request_headers] = request_headers input
|
33
|
-
input[:request_params] = request_params input
|
34
29
|
|
35
30
|
display = {}
|
36
31
|
input.each { |k, v| display[k] = v unless k.to_s == 'request_body' }
|
@@ -51,7 +46,7 @@ module QingStor
|
|
51
46
|
def self.request_uri(input)
|
52
47
|
unless input[:properties].nil?
|
53
48
|
input[:properties].each do |k, v|
|
54
|
-
input[:request_uri].gsub! "<#{k}>",
|
49
|
+
input[:request_uri].gsub! "<#{k}>", v.to_s
|
55
50
|
end
|
56
51
|
end
|
57
52
|
input[:request_uri]
|
@@ -59,14 +54,7 @@ module QingStor
|
|
59
54
|
|
60
55
|
def self.request_body(input)
|
61
56
|
body = input[:request_body]
|
62
|
-
body
|
63
|
-
return body if body
|
64
|
-
|
65
|
-
if input[:request_elements] && !input[:request_elements].empty?
|
66
|
-
json_body = JSON.generate input[:request_elements]
|
67
|
-
Logger.info "QingStor request json: [#{input[:id]}] #{json_body}"
|
68
|
-
json_body
|
69
|
-
end
|
57
|
+
body.is_a?(File) ? body.read : body
|
70
58
|
end
|
71
59
|
|
72
60
|
def self.request_headers(input)
|
@@ -91,33 +79,12 @@ module QingStor
|
|
91
79
|
input[:request_headers][:'Content-Type'] = 'application/octet-stream'
|
92
80
|
end
|
93
81
|
unless input[:request_headers][:'User-Agent']
|
94
|
-
ua = "
|
95
|
-
if input[:config][:additional_user_agent] && !input[:config][:additional_user_agent].empty?
|
96
|
-
ua = "#{ua} #{input[:config][:additional_user_agent]}"
|
97
|
-
end
|
82
|
+
ua = "QingStorSDK/#{QingStor::SDK::VERSION} (Ruby v#{RUBY_VERSION}; #{RUBY_PLATFORM})"
|
98
83
|
input[:request_headers][:'User-Agent'] = ua
|
99
84
|
end
|
100
|
-
|
101
|
-
if input[:api_name] == 'Delete Multiple Objects'
|
102
|
-
input[:request_headers][:'Content-MD5'] = Base64.encode64(Digest::MD5.digest(input[:request_body])).strip
|
103
|
-
end
|
104
|
-
|
105
|
-
input[:request_headers].map do |k, v|
|
106
|
-
input[:request_headers][k] = escape v.to_s unless v.to_s.ascii_only?
|
107
|
-
end
|
108
|
-
|
109
85
|
input[:request_headers]
|
110
86
|
end
|
111
87
|
|
112
|
-
def self.request_params(input)
|
113
|
-
unless input[:request_params].nil?
|
114
|
-
input[:request_params].map do |k, v|
|
115
|
-
input[:request_params][k] = escape v.to_s
|
116
|
-
end
|
117
|
-
end
|
118
|
-
input[:request_params]
|
119
|
-
end
|
120
|
-
|
121
88
|
def self.decorate_input(input)
|
122
89
|
input.deep_symbolize_keys!
|
123
90
|
input[:id] = (Random.new.rand * 1_000_000).to_int
|
@@ -131,14 +98,6 @@ module QingStor
|
|
131
98
|
end
|
132
99
|
object
|
133
100
|
end
|
134
|
-
|
135
|
-
def self.escape(origin)
|
136
|
-
origin = CGI.escape origin
|
137
|
-
origin.gsub! '%2F', '/'
|
138
|
-
origin.gsub! '%3D', '='
|
139
|
-
origin.gsub! '+', '%20'
|
140
|
-
origin
|
141
|
-
end
|
142
101
|
end
|
143
102
|
end
|
144
103
|
end
|
@@ -14,7 +14,6 @@
|
|
14
14
|
# | limitations under the License.
|
15
15
|
# +-------------------------------------------------------------------------
|
16
16
|
|
17
|
-
require 'uri'
|
18
17
|
require 'time'
|
19
18
|
require 'json'
|
20
19
|
require 'net/http'
|
@@ -63,15 +62,12 @@ module QingStor
|
|
63
62
|
|
64
63
|
def build
|
65
64
|
params = input[:request_params].map { |k, v| "#{k}=#{v}" }
|
66
|
-
query_string = params.join '&'
|
67
|
-
|
68
|
-
query_string = "#{input[:request_uri].include?('?') ? '&' : '?'}#{query_string}"
|
69
|
-
end
|
70
|
-
self.request_url = URI "#{input[:request_endpoint]}#{input[:request_uri]}#{query_string}"
|
65
|
+
query_string = !params.empty? ? "?#{params.join '&'}" : ''
|
66
|
+
self.request_url = "#{input[:request_endpoint]}#{Signer.escape input[:request_uri]}#{query_string}"
|
71
67
|
|
72
|
-
request = new_http_request input[:request_method], request_url
|
73
|
-
request.body = input[:request_body]
|
74
|
-
input[:request_headers].each { |k, v| request
|
68
|
+
request = new_http_request input[:request_method], request_url
|
69
|
+
request.body = build_request_body input[:request_body], input[:request_elements]
|
70
|
+
input[:request_headers].each { |k, v| request.add_field k.to_s, v }
|
75
71
|
|
76
72
|
self.http_request = request
|
77
73
|
end
|
@@ -106,6 +102,18 @@ module QingStor
|
|
106
102
|
end
|
107
103
|
end
|
108
104
|
|
105
|
+
def build_request_body(request_body, request_elements)
|
106
|
+
if request_body
|
107
|
+
request_body
|
108
|
+
elsif request_elements
|
109
|
+
unless request_elements.empty?
|
110
|
+
json_body = JSON.generate request_elements
|
111
|
+
Logger.info "QingStor request json: [#{input[:id]}] #{json_body}"
|
112
|
+
json_body
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
109
117
|
def new_http_request(method, url)
|
110
118
|
case method
|
111
119
|
when 'GET'
|
@@ -87,22 +87,29 @@ module QingStor
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def self.canonicalized_resource(input)
|
90
|
+
path = escape input[:request_uri]
|
91
|
+
|
90
92
|
params = input[:request_params].keys.sort.map { |k|
|
91
93
|
if sub_resource? k.to_s
|
92
94
|
v = input[:request_params][k].to_s.strip
|
93
|
-
!v.nil? && v != '' ? "#{k}=#{
|
95
|
+
!v.nil? && v != '' ? "#{k}=#{escape v}" : k
|
94
96
|
end
|
95
97
|
}.compact.join '&'
|
96
|
-
params =
|
97
|
-
"#{
|
98
|
+
params = path.include?('?') ? "&#{params}" : "?#{params}" if params != ''
|
99
|
+
"#{path}#{params}"
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.escape(original)
|
103
|
+
result = CGI.escape(original)
|
104
|
+
result.gsub! '%3F', '?'
|
105
|
+
result.gsub! '%2F', '/'
|
106
|
+
result.gsub! '+', '%20'
|
107
|
+
result.gsub! '%2B', '+'
|
108
|
+
result
|
98
109
|
end
|
99
110
|
|
100
111
|
def self.sub_resource?(key)
|
101
|
-
%w(
|
102
|
-
acl cors delete mirror part_number policy stats upload_id uploads
|
103
|
-
response-expires response-cache-control response-content-type
|
104
|
-
response-content-language response-content-encoding response-content-disposition
|
105
|
-
).include? key
|
112
|
+
%w(acl cors delete mirror part_number policy stats upload_id uploads).include? key
|
106
113
|
end
|
107
114
|
end
|
108
115
|
end
|
@@ -28,18 +28,12 @@ module QingStor
|
|
28
28
|
|
29
29
|
# delete_bucket: Delete a bucket.
|
30
30
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/delete.html
|
31
|
-
|
32
|
-
|
33
|
-
#
|
34
|
-
#
|
35
|
-
def delete(options = {})
|
36
|
-
options.deep_stringify_keys!
|
37
|
-
request = delete_request options
|
31
|
+
def delete
|
32
|
+
request = delete_request
|
38
33
|
request.send
|
39
34
|
end
|
40
35
|
|
41
|
-
def delete_request
|
42
|
-
options.deep_stringify_keys!
|
36
|
+
def delete_request
|
43
37
|
input = {
|
44
38
|
config: config,
|
45
39
|
properties: properties,
|
@@ -52,7 +46,9 @@ module QingStor
|
|
52
46
|
},
|
53
47
|
request_elements: {
|
54
48
|
},
|
49
|
+
|
55
50
|
request_body: nil,
|
51
|
+
|
56
52
|
status_code: [
|
57
53
|
204, # Bucket deleted
|
58
54
|
],
|
@@ -72,18 +68,12 @@ module QingStor
|
|
72
68
|
|
73
69
|
# delete_bucket_cors: Delete CORS information of the bucket.
|
74
70
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/cors/delete_cors.html
|
75
|
-
|
76
|
-
|
77
|
-
#
|
78
|
-
#
|
79
|
-
def delete_cors(options = {})
|
80
|
-
options.deep_stringify_keys!
|
81
|
-
request = delete_cors_request options
|
71
|
+
def delete_cors
|
72
|
+
request = delete_cors_request
|
82
73
|
request.send
|
83
74
|
end
|
84
75
|
|
85
|
-
def delete_cors_request
|
86
|
-
options.deep_stringify_keys!
|
76
|
+
def delete_cors_request
|
87
77
|
input = {
|
88
78
|
config: config,
|
89
79
|
properties: properties,
|
@@ -96,7 +86,9 @@ module QingStor
|
|
96
86
|
},
|
97
87
|
request_elements: {
|
98
88
|
},
|
89
|
+
|
99
90
|
request_body: nil,
|
91
|
+
|
100
92
|
status_code: [
|
101
93
|
200, # OK
|
102
94
|
],
|
@@ -116,18 +108,12 @@ module QingStor
|
|
116
108
|
|
117
109
|
# delete_bucket_external_mirror: Delete external mirror of the bucket.
|
118
110
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/external_mirror/delete_external_mirror.html
|
119
|
-
|
120
|
-
|
121
|
-
#
|
122
|
-
#
|
123
|
-
def delete_external_mirror(options = {})
|
124
|
-
options.deep_stringify_keys!
|
125
|
-
request = delete_external_mirror_request options
|
111
|
+
def delete_external_mirror
|
112
|
+
request = delete_external_mirror_request
|
126
113
|
request.send
|
127
114
|
end
|
128
115
|
|
129
|
-
def delete_external_mirror_request
|
130
|
-
options.deep_stringify_keys!
|
116
|
+
def delete_external_mirror_request
|
131
117
|
input = {
|
132
118
|
config: config,
|
133
119
|
properties: properties,
|
@@ -140,7 +126,9 @@ module QingStor
|
|
140
126
|
},
|
141
127
|
request_elements: {
|
142
128
|
},
|
129
|
+
|
143
130
|
request_body: nil,
|
131
|
+
|
144
132
|
status_code: [
|
145
133
|
204, # No content
|
146
134
|
],
|
@@ -160,18 +148,12 @@ module QingStor
|
|
160
148
|
|
161
149
|
# delete_bucket_policy: Delete policy information of the bucket.
|
162
150
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/policy/delete_policy.html
|
163
|
-
|
164
|
-
|
165
|
-
#
|
166
|
-
#
|
167
|
-
def delete_policy(options = {})
|
168
|
-
options.deep_stringify_keys!
|
169
|
-
request = delete_policy_request options
|
151
|
+
def delete_policy
|
152
|
+
request = delete_policy_request
|
170
153
|
request.send
|
171
154
|
end
|
172
155
|
|
173
|
-
def delete_policy_request
|
174
|
-
options.deep_stringify_keys!
|
156
|
+
def delete_policy_request
|
175
157
|
input = {
|
176
158
|
config: config,
|
177
159
|
properties: properties,
|
@@ -184,7 +166,9 @@ module QingStor
|
|
184
166
|
},
|
185
167
|
request_elements: {
|
186
168
|
},
|
169
|
+
|
187
170
|
request_body: nil,
|
171
|
+
|
188
172
|
status_code: [
|
189
173
|
204, # No content
|
190
174
|
],
|
@@ -204,21 +188,15 @@ module QingStor
|
|
204
188
|
|
205
189
|
# delete_multiple_objects: Delete multiple objects from the bucket.
|
206
190
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/delete_multiple.html
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
# * +:objects+ - A list of keys to delete
|
212
|
-
# * +:quiet+ - Whether to return the list of deleted objects
|
213
|
-
#
|
214
|
-
def delete_multiple_objects(options = {})
|
215
|
-
options.deep_stringify_keys!
|
216
|
-
request = delete_multiple_objects_request options
|
191
|
+
def delete_multiple_objects(content_md5: '', objects: [],
|
192
|
+
quiet: nil)
|
193
|
+
request = delete_multiple_objects_request content_md5: content_md5, objects: objects,
|
194
|
+
quiet: quiet
|
217
195
|
request.send
|
218
196
|
end
|
219
197
|
|
220
|
-
def delete_multiple_objects_request(
|
221
|
-
|
198
|
+
def delete_multiple_objects_request(content_md5: '', objects: [],
|
199
|
+
quiet: nil)
|
222
200
|
input = {
|
223
201
|
config: config,
|
224
202
|
properties: properties,
|
@@ -228,12 +206,15 @@ module QingStor
|
|
228
206
|
request_params: {
|
229
207
|
},
|
230
208
|
request_headers: {
|
209
|
+
'Content-MD5' => content_md5,
|
231
210
|
},
|
232
211
|
request_elements: {
|
233
|
-
'objects' =>
|
234
|
-
'quiet' =>
|
212
|
+
'objects' => objects,
|
213
|
+
'quiet' => quiet,
|
235
214
|
},
|
215
|
+
|
236
216
|
request_body: nil,
|
217
|
+
|
237
218
|
status_code: [
|
238
219
|
200, # OK
|
239
220
|
],
|
@@ -248,6 +229,10 @@ module QingStor
|
|
248
229
|
def delete_multiple_objects_input_validate(input)
|
249
230
|
input.deep_stringify_keys!
|
250
231
|
|
232
|
+
unless !input['request_headers']['Content-MD5'].nil? && !input['request_headers']['Content-MD5'].to_s.empty?
|
233
|
+
raise ParameterRequiredError.new('Content-MD5', 'DeleteMultipleObjectsInput')
|
234
|
+
end
|
235
|
+
|
251
236
|
unless !input['request_elements']['objects'].nil? && !input['request_elements']['objects'].to_s.empty?
|
252
237
|
raise ParameterRequiredError.new('objects', 'DeleteMultipleObjectsInput')
|
253
238
|
end
|
@@ -260,18 +245,12 @@ module QingStor
|
|
260
245
|
|
261
246
|
# get_bucket_acl: Get ACL information of the bucket.
|
262
247
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/get_acl.html
|
263
|
-
|
264
|
-
|
265
|
-
#
|
266
|
-
#
|
267
|
-
def get_acl(options = {})
|
268
|
-
options.deep_stringify_keys!
|
269
|
-
request = get_acl_request options
|
248
|
+
def get_acl
|
249
|
+
request = get_acl_request
|
270
250
|
request.send
|
271
251
|
end
|
272
252
|
|
273
|
-
def get_acl_request
|
274
|
-
options.deep_stringify_keys!
|
253
|
+
def get_acl_request
|
275
254
|
input = {
|
276
255
|
config: config,
|
277
256
|
properties: properties,
|
@@ -284,7 +263,9 @@ module QingStor
|
|
284
263
|
},
|
285
264
|
request_elements: {
|
286
265
|
},
|
266
|
+
|
287
267
|
request_body: nil,
|
268
|
+
|
288
269
|
status_code: [
|
289
270
|
200, # OK
|
290
271
|
],
|
@@ -304,18 +285,12 @@ module QingStor
|
|
304
285
|
|
305
286
|
# get_bucket_cors: Get CORS information of the bucket.
|
306
287
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/cors/get_cors.html
|
307
|
-
|
308
|
-
|
309
|
-
#
|
310
|
-
#
|
311
|
-
def get_cors(options = {})
|
312
|
-
options.deep_stringify_keys!
|
313
|
-
request = get_cors_request options
|
288
|
+
def get_cors
|
289
|
+
request = get_cors_request
|
314
290
|
request.send
|
315
291
|
end
|
316
292
|
|
317
|
-
def get_cors_request
|
318
|
-
options.deep_stringify_keys!
|
293
|
+
def get_cors_request
|
319
294
|
input = {
|
320
295
|
config: config,
|
321
296
|
properties: properties,
|
@@ -328,7 +303,9 @@ module QingStor
|
|
328
303
|
},
|
329
304
|
request_elements: {
|
330
305
|
},
|
306
|
+
|
331
307
|
request_body: nil,
|
308
|
+
|
332
309
|
status_code: [
|
333
310
|
200, # OK
|
334
311
|
],
|
@@ -348,18 +325,12 @@ module QingStor
|
|
348
325
|
|
349
326
|
# get_bucket_external_mirror: Get external mirror of the bucket.
|
350
327
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/external_mirror/get_external_mirror.html
|
351
|
-
|
352
|
-
|
353
|
-
#
|
354
|
-
#
|
355
|
-
def get_external_mirror(options = {})
|
356
|
-
options.deep_stringify_keys!
|
357
|
-
request = get_external_mirror_request options
|
328
|
+
def get_external_mirror
|
329
|
+
request = get_external_mirror_request
|
358
330
|
request.send
|
359
331
|
end
|
360
332
|
|
361
|
-
def get_external_mirror_request
|
362
|
-
options.deep_stringify_keys!
|
333
|
+
def get_external_mirror_request
|
363
334
|
input = {
|
364
335
|
config: config,
|
365
336
|
properties: properties,
|
@@ -372,7 +343,9 @@ module QingStor
|
|
372
343
|
},
|
373
344
|
request_elements: {
|
374
345
|
},
|
346
|
+
|
375
347
|
request_body: nil,
|
348
|
+
|
376
349
|
status_code: [
|
377
350
|
200, # OK
|
378
351
|
],
|
@@ -392,18 +365,12 @@ module QingStor
|
|
392
365
|
|
393
366
|
# get_bucket_policy: Get policy information of the bucket.
|
394
367
|
# Documentation URL: https://https://docs.qingcloud.com/qingstor/api/bucket/policy/get_policy.html
|
395
|
-
|
396
|
-
|
397
|
-
#
|
398
|
-
#
|
399
|
-
def get_policy(options = {})
|
400
|
-
options.deep_stringify_keys!
|
401
|
-
request = get_policy_request options
|
368
|
+
def get_policy
|
369
|
+
request = get_policy_request
|
402
370
|
request.send
|
403
371
|
end
|
404
372
|
|
405
|
-
def get_policy_request
|
406
|
-
options.deep_stringify_keys!
|
373
|
+
def get_policy_request
|
407
374
|
input = {
|
408
375
|
config: config,
|
409
376
|
properties: properties,
|
@@ -416,7 +383,9 @@ module QingStor
|
|
416
383
|
},
|
417
384
|
request_elements: {
|
418
385
|
},
|
386
|
+
|
419
387
|
request_body: nil,
|
388
|
+
|
420
389
|
status_code: [
|
421
390
|
200, # OK
|
422
391
|
],
|
@@ -436,18 +405,12 @@ module QingStor
|
|
436
405
|
|
437
406
|
# get_bucket_statistics: Get statistics information of the bucket.
|
438
407
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/get_stats.html
|
439
|
-
|
440
|
-
|
441
|
-
#
|
442
|
-
#
|
443
|
-
def get_statistics(options = {})
|
444
|
-
options.deep_stringify_keys!
|
445
|
-
request = get_statistics_request options
|
408
|
+
def get_statistics
|
409
|
+
request = get_statistics_request
|
446
410
|
request.send
|
447
411
|
end
|
448
412
|
|
449
|
-
def get_statistics_request
|
450
|
-
options.deep_stringify_keys!
|
413
|
+
def get_statistics_request
|
451
414
|
input = {
|
452
415
|
config: config,
|
453
416
|
properties: properties,
|
@@ -460,7 +423,9 @@ module QingStor
|
|
460
423
|
},
|
461
424
|
request_elements: {
|
462
425
|
},
|
426
|
+
|
463
427
|
request_body: nil,
|
428
|
+
|
464
429
|
status_code: [
|
465
430
|
200, # OK
|
466
431
|
],
|
@@ -480,18 +445,12 @@ module QingStor
|
|
480
445
|
|
481
446
|
# head_bucket: Check whether the bucket exists and available.
|
482
447
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/head.html
|
483
|
-
|
484
|
-
|
485
|
-
#
|
486
|
-
#
|
487
|
-
def head(options = {})
|
488
|
-
options.deep_stringify_keys!
|
489
|
-
request = head_request options
|
448
|
+
def head
|
449
|
+
request = head_request
|
490
450
|
request.send
|
491
451
|
end
|
492
452
|
|
493
|
-
def head_request
|
494
|
-
options.deep_stringify_keys!
|
453
|
+
def head_request
|
495
454
|
input = {
|
496
455
|
config: config,
|
497
456
|
properties: properties,
|
@@ -504,7 +463,9 @@ module QingStor
|
|
504
463
|
},
|
505
464
|
request_elements: {
|
506
465
|
},
|
466
|
+
|
507
467
|
request_body: nil,
|
468
|
+
|
508
469
|
status_code: [
|
509
470
|
200, # OK
|
510
471
|
],
|
@@ -522,76 +483,23 @@ module QingStor
|
|
522
483
|
|
523
484
|
public
|
524
485
|
|
525
|
-
# list_multipart_uploads: List multipart uploads in the bucket.
|
526
|
-
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/list_multipart_uploads.html
|
527
|
-
#
|
528
|
-
# == Options
|
529
|
-
#
|
530
|
-
# * +:delimiter+ - Put all keys that share a common prefix into a list
|
531
|
-
# * +:limit+ - Results count limit
|
532
|
-
# * +:marker+ - Limit results to keys that start at this marker
|
533
|
-
# * +:prefix+ - Limits results to keys that begin with the prefix
|
534
|
-
#
|
535
|
-
def list_multipart_uploads(options = {})
|
536
|
-
options.deep_stringify_keys!
|
537
|
-
request = list_multipart_uploads_request options
|
538
|
-
request.send
|
539
|
-
end
|
540
|
-
|
541
|
-
def list_multipart_uploads_request(options = {})
|
542
|
-
options.deep_stringify_keys!
|
543
|
-
input = {
|
544
|
-
config: config,
|
545
|
-
properties: properties,
|
546
|
-
api_name: 'List Multipart Uploads',
|
547
|
-
request_method: 'GET',
|
548
|
-
request_uri: '/<bucket-name>?uploads',
|
549
|
-
request_params: {
|
550
|
-
'delimiter' => options['delimiter'],
|
551
|
-
'limit' => options['limit'],
|
552
|
-
'marker' => options['marker'],
|
553
|
-
'prefix' => options['prefix'],
|
554
|
-
},
|
555
|
-
request_headers: {
|
556
|
-
},
|
557
|
-
request_elements: {
|
558
|
-
},
|
559
|
-
request_body: nil,
|
560
|
-
status_code: [
|
561
|
-
200, # OK
|
562
|
-
],
|
563
|
-
}
|
564
|
-
|
565
|
-
list_multipart_uploads_input_validate input
|
566
|
-
Request.new input
|
567
|
-
end
|
568
|
-
|
569
|
-
private
|
570
|
-
|
571
|
-
def list_multipart_uploads_input_validate(input)
|
572
|
-
input.deep_stringify_keys!
|
573
|
-
end
|
574
|
-
|
575
|
-
public
|
576
|
-
|
577
486
|
# list_objects: Retrieve the object list in a bucket.
|
578
487
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/get.html
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
def list_objects(options = {})
|
588
|
-
options.deep_stringify_keys!
|
589
|
-
request = list_objects_request options
|
488
|
+
def list_objects(delimiter: '',
|
489
|
+
limit: nil,
|
490
|
+
marker: '',
|
491
|
+
prefix: '')
|
492
|
+
request = list_objects_request delimiter: delimiter,
|
493
|
+
limit: limit,
|
494
|
+
marker: marker,
|
495
|
+
prefix: prefix
|
590
496
|
request.send
|
591
497
|
end
|
592
498
|
|
593
|
-
def list_objects_request(
|
594
|
-
|
499
|
+
def list_objects_request(delimiter: '',
|
500
|
+
limit: nil,
|
501
|
+
marker: '',
|
502
|
+
prefix: '')
|
595
503
|
input = {
|
596
504
|
config: config,
|
597
505
|
properties: properties,
|
@@ -599,16 +507,18 @@ module QingStor
|
|
599
507
|
request_method: 'GET',
|
600
508
|
request_uri: '/<bucket-name>',
|
601
509
|
request_params: {
|
602
|
-
'delimiter' =>
|
603
|
-
'limit' =>
|
604
|
-
'marker' =>
|
605
|
-
'prefix' =>
|
510
|
+
'delimiter' => delimiter,
|
511
|
+
'limit' => limit,
|
512
|
+
'marker' => marker,
|
513
|
+
'prefix' => prefix,
|
606
514
|
},
|
607
515
|
request_headers: {
|
608
516
|
},
|
609
517
|
request_elements: {
|
610
518
|
},
|
519
|
+
|
611
520
|
request_body: nil,
|
521
|
+
|
612
522
|
status_code: [
|
613
523
|
200, # OK
|
614
524
|
],
|
@@ -628,18 +538,12 @@ module QingStor
|
|
628
538
|
|
629
539
|
# put_bucket: Create a new bucket.
|
630
540
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/put.html
|
631
|
-
|
632
|
-
|
633
|
-
#
|
634
|
-
#
|
635
|
-
def put(options = {})
|
636
|
-
options.deep_stringify_keys!
|
637
|
-
request = put_request options
|
541
|
+
def put
|
542
|
+
request = put_request
|
638
543
|
request.send
|
639
544
|
end
|
640
545
|
|
641
|
-
def put_request
|
642
|
-
options.deep_stringify_keys!
|
546
|
+
def put_request
|
643
547
|
input = {
|
644
548
|
config: config,
|
645
549
|
properties: properties,
|
@@ -652,7 +556,9 @@ module QingStor
|
|
652
556
|
},
|
653
557
|
request_elements: {
|
654
558
|
},
|
559
|
+
|
655
560
|
request_body: nil,
|
561
|
+
|
656
562
|
status_code: [
|
657
563
|
201, # Bucket created
|
658
564
|
],
|
@@ -672,19 +578,12 @@ module QingStor
|
|
672
578
|
|
673
579
|
# put_bucket_acl: Set ACL information of the bucket.
|
674
580
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/put_acl.html
|
675
|
-
|
676
|
-
|
677
|
-
#
|
678
|
-
# * +:acl+ - Bucket ACL rules
|
679
|
-
#
|
680
|
-
def put_acl(options = {})
|
681
|
-
options.deep_stringify_keys!
|
682
|
-
request = put_acl_request options
|
581
|
+
def put_acl(acl: [])
|
582
|
+
request = put_acl_request acl: acl
|
683
583
|
request.send
|
684
584
|
end
|
685
585
|
|
686
|
-
def put_acl_request(
|
687
|
-
options.deep_stringify_keys!
|
586
|
+
def put_acl_request(acl: [])
|
688
587
|
input = {
|
689
588
|
config: config,
|
690
589
|
properties: properties,
|
@@ -696,9 +595,11 @@ module QingStor
|
|
696
595
|
request_headers: {
|
697
596
|
},
|
698
597
|
request_elements: {
|
699
|
-
'acl' =>
|
598
|
+
'acl' => acl,
|
700
599
|
},
|
600
|
+
|
701
601
|
request_body: nil,
|
602
|
+
|
702
603
|
status_code: [
|
703
604
|
200, # OK
|
704
605
|
],
|
@@ -758,19 +659,12 @@ module QingStor
|
|
758
659
|
|
759
660
|
# put_bucket_cors: Set CORS information of the bucket.
|
760
661
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/cors/put_cors.html
|
761
|
-
|
762
|
-
|
763
|
-
#
|
764
|
-
# * +:cors_rules+ - Bucket CORS rules
|
765
|
-
#
|
766
|
-
def put_cors(options = {})
|
767
|
-
options.deep_stringify_keys!
|
768
|
-
request = put_cors_request options
|
662
|
+
def put_cors(cors_rules: [])
|
663
|
+
request = put_cors_request cors_rules: cors_rules
|
769
664
|
request.send
|
770
665
|
end
|
771
666
|
|
772
|
-
def put_cors_request(
|
773
|
-
options.deep_stringify_keys!
|
667
|
+
def put_cors_request(cors_rules: [])
|
774
668
|
input = {
|
775
669
|
config: config,
|
776
670
|
properties: properties,
|
@@ -782,9 +676,11 @@ module QingStor
|
|
782
676
|
request_headers: {
|
783
677
|
},
|
784
678
|
request_elements: {
|
785
|
-
'cors_rules' =>
|
679
|
+
'cors_rules' => cors_rules,
|
786
680
|
},
|
681
|
+
|
787
682
|
request_body: nil,
|
683
|
+
|
788
684
|
status_code: [
|
789
685
|
200, # OK
|
790
686
|
],
|
@@ -818,19 +714,12 @@ module QingStor
|
|
818
714
|
|
819
715
|
# put_bucket_external_mirror: Set external mirror of the bucket.
|
820
716
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/external_mirror/put_external_mirror.html
|
821
|
-
|
822
|
-
|
823
|
-
#
|
824
|
-
# * +:source_site+ - Source site url
|
825
|
-
#
|
826
|
-
def put_external_mirror(options = {})
|
827
|
-
options.deep_stringify_keys!
|
828
|
-
request = put_external_mirror_request options
|
717
|
+
def put_external_mirror(source_site: '')
|
718
|
+
request = put_external_mirror_request source_site: source_site
|
829
719
|
request.send
|
830
720
|
end
|
831
721
|
|
832
|
-
def put_external_mirror_request(
|
833
|
-
options.deep_stringify_keys!
|
722
|
+
def put_external_mirror_request(source_site: '')
|
834
723
|
input = {
|
835
724
|
config: config,
|
836
725
|
properties: properties,
|
@@ -842,9 +731,11 @@ module QingStor
|
|
842
731
|
request_headers: {
|
843
732
|
},
|
844
733
|
request_elements: {
|
845
|
-
'source_site' =>
|
734
|
+
'source_site' => source_site,
|
846
735
|
},
|
736
|
+
|
847
737
|
request_body: nil,
|
738
|
+
|
848
739
|
status_code: [
|
849
740
|
200, # OK
|
850
741
|
],
|
@@ -868,19 +759,12 @@ module QingStor
|
|
868
759
|
|
869
760
|
# put_bucket_policy: Set policy information of the bucket.
|
870
761
|
# Documentation URL: https://docs.qingcloud.com/qingstor/api/bucket/policy/put_policy.html
|
871
|
-
|
872
|
-
|
873
|
-
#
|
874
|
-
# * +:statement+ - Bucket policy statement
|
875
|
-
#
|
876
|
-
def put_policy(options = {})
|
877
|
-
options.deep_stringify_keys!
|
878
|
-
request = put_policy_request options
|
762
|
+
def put_policy(statement: [])
|
763
|
+
request = put_policy_request statement: statement
|
879
764
|
request.send
|
880
765
|
end
|
881
766
|
|
882
|
-
def put_policy_request(
|
883
|
-
options.deep_stringify_keys!
|
767
|
+
def put_policy_request(statement: [])
|
884
768
|
input = {
|
885
769
|
config: config,
|
886
770
|
properties: properties,
|
@@ -892,9 +776,11 @@ module QingStor
|
|
892
776
|
request_headers: {
|
893
777
|
},
|
894
778
|
request_elements: {
|
895
|
-
'statement' =>
|
779
|
+
'statement' => statement,
|
896
780
|
},
|
781
|
+
|
897
782
|
request_body: nil,
|
783
|
+
|
898
784
|
status_code: [
|
899
785
|
200, # OK
|
900
786
|
],
|
@@ -920,18 +806,10 @@ module QingStor
|
|
920
806
|
|
921
807
|
unless x['condition'].nil?
|
922
808
|
|
923
|
-
unless x['condition']['ip_address'].nil?
|
924
|
-
|
925
|
-
end
|
926
|
-
|
927
809
|
unless x['condition']['is_null'].nil?
|
928
810
|
|
929
811
|
end
|
930
812
|
|
931
|
-
unless x['condition']['not_ip_address'].nil?
|
932
|
-
|
933
|
-
end
|
934
|
-
|
935
813
|
unless x['condition']['string_like'].nil?
|
936
814
|
|
937
815
|
end
|
@@ -961,6 +839,10 @@ module QingStor
|
|
961
839
|
raise ParameterRequiredError.new('id', 'statement')
|
962
840
|
end
|
963
841
|
|
842
|
+
unless !x['resource'].nil? && !x['resource'].to_s.empty?
|
843
|
+
raise ParameterRequiredError.new('resource', 'statement')
|
844
|
+
end
|
845
|
+
|
964
846
|
unless !x['user'].nil? && !x['user'].to_s.empty?
|
965
847
|
raise ParameterRequiredError.new('user', 'statement')
|
966
848
|
end
|