qiniu 6.7.0 → 6.8.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/examples/fetch.rb +25 -0
- data/examples/list.rb +21 -0
- data/lib/qiniu.rb +1 -0
- data/lib/qiniu/auth.rb +12 -1
- data/lib/qiniu/config.rb +16 -6
- data/lib/qiniu/host_manager.rb +104 -0
- data/lib/qiniu/management.rb +1 -6
- data/lib/qiniu/resumable_upload.rb +10 -8
- data/lib/qiniu/upload.rb +11 -3
- data/lib/qiniu/version.rb +1 -1
- data/spec/qiniu/auth_spec.rb +22 -1
- data/spec/qiniu/management_spec.rb +57 -33
- data/spec/qiniu/upload_spec.rb +83 -72
- metadata +25 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de7295d2117d781da3393be2970a1fe47fc805e7
|
4
|
+
data.tar.gz: effdc4eeb3869a3cac362d6f23196f3b6a22f20a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6ffe81579309aa77188ead19e97d422176496b1ecb8b32c4d4455d5dbe0b175a7a55ce73112f8fbb0e2338ee6caa3b25a68ae2e3e038f9a1c23fc945cb6e125
|
7
|
+
data.tar.gz: 302e9930d19d6ecf33d69a8a77adc457b16cbcb08e0f6a641efe80405f61a3c6fac674c3e76b7702f1574fd475b96976f6d1f39da40a01ab36f2b87359bfa438
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
## CHANGE LOG
|
2
2
|
|
3
|
+
### v6.8.0
|
4
|
+
|
5
|
+
- 支持多存储区域,部分 API 需要额外的 bucket 参数。[https://github.com/qiniu/ruby-sdk/pull/161](https://github.com/qiniu/ruby-sdk/pull/161)
|
6
|
+
|
3
7
|
### v6.7.0
|
4
8
|
|
5
9
|
- 放弃支持过时的 Ruby 1.9、Ruby 2.0 和 JRuby 1.7。[https://github.com/qiniu/ruby-sdk/pull/149](https://github.com/qiniu/ruby-sdk/pull/149)
|
data/README.md
CHANGED
data/examples/fetch.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'qiniu'
|
4
|
+
|
5
|
+
Qiniu.establish_connection! :access_key => 'xxx',
|
6
|
+
:secret_key => 'xxx'
|
7
|
+
|
8
|
+
#需要fetch操作保存到的空间名
|
9
|
+
bucket = 'xxx'
|
10
|
+
#fetch过来的url,需要外网可以访问到
|
11
|
+
target_url = 'url'
|
12
|
+
#保存到空间的fetch操作的文件名
|
13
|
+
key = 'xxx'
|
14
|
+
|
15
|
+
#调用fetch方法
|
16
|
+
code, result, response_headers = Qiniu::Storage.fetch(
|
17
|
+
bucket,
|
18
|
+
target_url,
|
19
|
+
key
|
20
|
+
)
|
21
|
+
|
22
|
+
#打印返回的状态码以及信息
|
23
|
+
puts code
|
24
|
+
puts result
|
25
|
+
puts response_headers
|
data/examples/list.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'qiniu'
|
4
|
+
|
5
|
+
Qiniu.establish_connection! :access_key => 'xxxx',
|
6
|
+
:secret_key => 'xxxx'
|
7
|
+
|
8
|
+
#你要测试的list的空间名
|
9
|
+
bucket = 'xxxx'
|
10
|
+
|
11
|
+
#调用list接口,参数可以参考 http://developer.qiniu.com/code/v6/api/kodo-api/rs/list.html#list-specification
|
12
|
+
code, result, response_headers, s, d = Qiniu::Storage.list(Qiniu::Storage::ListPolicy.new(
|
13
|
+
bucket, # bucket
|
14
|
+
100, # limit
|
15
|
+
'photo/', # prefix
|
16
|
+
'' # delimiter
|
17
|
+
))
|
18
|
+
#打印出返回的状态码和信息
|
19
|
+
puts code
|
20
|
+
puts result
|
21
|
+
puts response_headers
|
data/lib/qiniu.rb
CHANGED
data/lib/qiniu/auth.rb
CHANGED
@@ -74,7 +74,9 @@ module Qiniu
|
|
74
74
|
:fsize_limit => "fsizeLimit" ,
|
75
75
|
:callback_fetch_key => "callbackFetchKey" ,
|
76
76
|
:detect_mime => "detectMime" ,
|
77
|
-
:mime_limit => "mimeLimit"
|
77
|
+
:mime_limit => "mimeLimit" ,
|
78
|
+
:uphosts => "uphosts" ,
|
79
|
+
:global => "global"
|
78
80
|
} # PARAMS
|
79
81
|
|
80
82
|
public
|
@@ -91,6 +93,15 @@ module Qiniu
|
|
91
93
|
# 覆盖语义,文件已存在则直接覆盖
|
92
94
|
@scope = "#{bucket}:#{key}"
|
93
95
|
end
|
96
|
+
|
97
|
+
if Config.settings[:multi_region]
|
98
|
+
begin
|
99
|
+
@uphosts = Config.host_manager.up_hosts(bucket)
|
100
|
+
@global = Config.host_manager.global(bucket)
|
101
|
+
rescue
|
102
|
+
# Do nothing
|
103
|
+
end
|
104
|
+
end
|
94
105
|
end # scope!
|
95
106
|
|
96
107
|
def expires_in!(seconds)
|
data/lib/qiniu/config.rb
CHANGED
@@ -20,12 +20,12 @@ module Qiniu
|
|
20
20
|
:content_type => 'application/x-www-form-urlencoded',
|
21
21
|
:auth_url => "https://acc.qbox.me/oauth2/token",
|
22
22
|
:rs_host => "http://rs.qiniu.com",
|
23
|
-
:fetch_host =>
|
23
|
+
:fetch_host => nil,
|
24
24
|
:rsf_host => "http://rsf.qbox.me",
|
25
|
-
:up_host =>
|
25
|
+
:up_host => nil,
|
26
26
|
:pub_host => "http://pu.qbox.me:10200",
|
27
27
|
:eu_host => "http://eu.qbox.me",
|
28
|
-
:
|
28
|
+
:uc_host => "http://uc.qbox.me",
|
29
29
|
:access_key => "",
|
30
30
|
:secret_key => "",
|
31
31
|
:auto_reconnect => true,
|
@@ -33,12 +33,13 @@ module Qiniu
|
|
33
33
|
:block_size => 1024*1024*4,
|
34
34
|
:chunk_size => 1024*256,
|
35
35
|
:enable_debug => true,
|
36
|
-
:tmpdir => Dir.tmpdir + File::SEPARATOR + 'QiniuRuby'
|
36
|
+
:tmpdir => Dir.tmpdir + File::SEPARATOR + 'QiniuRuby',
|
37
|
+
:multi_region => true
|
37
38
|
}
|
38
39
|
|
39
|
-
REQUIRED_OPTION_KEYS = [:access_key, :secret_key
|
40
|
+
REQUIRED_OPTION_KEYS = [:access_key, :secret_key]
|
40
41
|
|
41
|
-
attr_reader :settings, :default_params
|
42
|
+
attr_reader :settings, :default_params, :host_manager
|
42
43
|
|
43
44
|
def load config_file
|
44
45
|
if File.exist?(config_file)
|
@@ -55,8 +56,17 @@ module Qiniu
|
|
55
56
|
REQUIRED_OPTION_KEYS.each do |opt|
|
56
57
|
raise MissingArgsError, [opt] unless @settings.has_key?(opt)
|
57
58
|
end
|
59
|
+
@host_manager = HostManager.new(@settings)
|
60
|
+
nil
|
58
61
|
end
|
59
62
|
|
63
|
+
def up_host(bucket, opts = {})
|
64
|
+
@settings[:up_host] || @host_manager.up_host(bucket, opts)
|
65
|
+
end
|
66
|
+
|
67
|
+
def fetch_host(bucket, opts = {})
|
68
|
+
@settings[:fetch_host] || @host_manager.fetch_host(bucket, opts)
|
69
|
+
end
|
60
70
|
end
|
61
71
|
end # module Config
|
62
72
|
end # module Qiniu
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'thread'
|
2
|
+
require 'cgi'
|
3
|
+
|
4
|
+
module Qiniu
|
5
|
+
class BucketIsMissing < RuntimeError; end
|
6
|
+
|
7
|
+
class HostManager
|
8
|
+
def initialize(config)
|
9
|
+
@config = config
|
10
|
+
@mutex = Mutex.new
|
11
|
+
@hosts = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
def up_host(bucket, opts = {})
|
15
|
+
if !multi_region_support?
|
16
|
+
"#{extract_protocol(opts)}://up.qiniu.com"
|
17
|
+
elsif bucket
|
18
|
+
hosts(bucket)[extract_protocol(opts)]['up'][0] rescue "#{extract_protocol(opts)}://up.qiniu.com"
|
19
|
+
else
|
20
|
+
raise BucketIsMissing, 'HostManager#up_host: bucket is required when multi_region is enabled'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def fetch_host(bucket, opts = {})
|
25
|
+
if !multi_region_support?
|
26
|
+
"#{extract_protocol(opts)}://iovip.qbox.me"
|
27
|
+
elsif bucket
|
28
|
+
hosts(bucket)[extract_protocol(opts)]['io'][0] rescue "#{extract_protocol(opts)}://iovip.qbox.me"
|
29
|
+
else
|
30
|
+
raise BucketIsMissing, 'HostManager#fetch_host: bucket is required when multi_region is enabled'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def up_hosts(bucket, opts = {})
|
35
|
+
if multi_region_support?
|
36
|
+
hosts(bucket)[extract_protocol(opts)]['up']
|
37
|
+
else
|
38
|
+
raise 'HostManager#up_hosts: multi_region must be enabled'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def global(bucket, opts = {})
|
43
|
+
if multi_region_support?
|
44
|
+
!!hosts(bucket)['global']
|
45
|
+
else
|
46
|
+
raise 'HostManager#global: multi_region must be enabled'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def extract_protocol(opts)
|
53
|
+
opts[:protocol] || 'http'
|
54
|
+
end
|
55
|
+
|
56
|
+
def multi_region_support?
|
57
|
+
@config[:multi_region]
|
58
|
+
end
|
59
|
+
|
60
|
+
def hosts(bucket)
|
61
|
+
host = read_host(bucket)
|
62
|
+
if host
|
63
|
+
if host_expired?(host)
|
64
|
+
delete_host(bucket)
|
65
|
+
else
|
66
|
+
return host
|
67
|
+
end
|
68
|
+
end
|
69
|
+
url = @config[:uc_host] + '/v1/query?' + HTTP.generate_query_string(ak: @config[:access_key], bucket: bucket)
|
70
|
+
status, body = HTTP.api_get(url)
|
71
|
+
if HTTP.is_response_ok?(status)
|
72
|
+
Utils.debug("Query #{bucket} hosts Success: #{body}")
|
73
|
+
host = body.merge(:time => Time.now)
|
74
|
+
write_host(bucket, host)
|
75
|
+
host
|
76
|
+
else
|
77
|
+
Utils.debug("Query #{bucket} hosts Error: #{body}")
|
78
|
+
raise "Host query is failed"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def host_expired?(host)
|
83
|
+
host[:time] + host['ttl'] < Time.now
|
84
|
+
end
|
85
|
+
|
86
|
+
def read_host(bucket)
|
87
|
+
@mutex.synchronize do
|
88
|
+
@hosts[bucket]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def write_host(bucket, host)
|
93
|
+
@mutex.synchronize do
|
94
|
+
@hosts[bucket] = host
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def delete_host(bucket)
|
99
|
+
@mutex.synchronize do
|
100
|
+
@hosts.delete(bucket)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
data/lib/qiniu/management.rb
CHANGED
@@ -83,7 +83,7 @@ module Qiniu
|
|
83
83
|
end # delete
|
84
84
|
|
85
85
|
def fetch(bucket, target_url, key)
|
86
|
-
url = Config.
|
86
|
+
url = Config.fetch_host(bucket) + '/fetch/' + Utils.urlsafe_base64_encode(target_url) + '/to/' + encode_entry_uri(bucket, key)
|
87
87
|
return HTTP.management_post(url)
|
88
88
|
end # fetch
|
89
89
|
|
@@ -149,11 +149,6 @@ module Qiniu
|
|
149
149
|
return resp_code, resp_body, resp_headers, has_more, new_list_policy
|
150
150
|
end # list
|
151
151
|
|
152
|
-
def fetch(url, bucket, key)
|
153
|
-
api_url = Config.settings[:iovip_host] + '/fetch/' + Utils.urlsafe_base64_encode(url) + '/to/' + Utils.urlsafe_base64_encode("#{bucket}:#{key}")
|
154
|
-
return HTTP.management_post(api_url)
|
155
|
-
end # fetch
|
156
|
-
|
157
152
|
private
|
158
153
|
|
159
154
|
def _generate_cp_or_mv_opstr(command, source_bucket, source_key, target_bucket, target_key)
|
@@ -103,7 +103,7 @@ module Qiniu
|
|
103
103
|
}
|
104
104
|
}
|
105
105
|
if !content_type.nil? && !content_type.empty? then
|
106
|
-
options[:headers][:content_type] = content_type
|
106
|
+
options[:headers][:content_type] = content_type
|
107
107
|
end
|
108
108
|
|
109
109
|
code, data, raw_headers = HTTP.api_post(url, data, options)
|
@@ -116,8 +116,8 @@ module Qiniu
|
|
116
116
|
return code, data, raw_headers
|
117
117
|
end # _call_binary_with_token
|
118
118
|
|
119
|
-
def _mkblock(uptoken, block_size, body)
|
120
|
-
url = Config.
|
119
|
+
def _mkblock(bucket, uptoken, block_size, body)
|
120
|
+
url = Config.up_host(bucket) + "/mkblk/#{block_size}"
|
121
121
|
_call_binary_with_token(uptoken, url, body)
|
122
122
|
end # _mkblock
|
123
123
|
|
@@ -126,7 +126,8 @@ module Qiniu
|
|
126
126
|
_call_binary_with_token(uptoken, url, body)
|
127
127
|
end # _putblock
|
128
128
|
|
129
|
-
def _resumable_put_block(
|
129
|
+
def _resumable_put_block(bucket,
|
130
|
+
uptoken,
|
130
131
|
fh,
|
131
132
|
block_index,
|
132
133
|
block_size,
|
@@ -151,7 +152,7 @@ module Qiniu
|
|
151
152
|
raise FileSeekReadError.new(fpath, block_index, seek_pos, body_length, result_length)
|
152
153
|
end
|
153
154
|
|
154
|
-
code, data, raw_headers = _mkblock(uptoken, block_size, body)
|
155
|
+
code, data, raw_headers = _mkblock(bucket, uptoken, block_size, body)
|
155
156
|
Utils.debug "Mkblk : #{code.inspect} #{data.inspect} #{raw_headers.inspect}"
|
156
157
|
|
157
158
|
body_crc32 = Zlib.crc32(body)
|
@@ -214,7 +215,8 @@ module Qiniu
|
|
214
215
|
((fsize + Config.settings[:block_size] - 1) / Config.settings[:block_size]).to_i
|
215
216
|
end # _block_count
|
216
217
|
|
217
|
-
def _resumable_put(
|
218
|
+
def _resumable_put(bucket,
|
219
|
+
uptoken,
|
218
220
|
fh,
|
219
221
|
checksums,
|
220
222
|
progresses,
|
@@ -239,7 +241,7 @@ module Qiniu
|
|
239
241
|
end
|
240
242
|
#code, data = _resumable_put_block(uptoken, fh, block_index, block_size, Config.settings[:chunk_size], progresses[block_index], Config.settings[:max_retry_times], chunk_notifier)
|
241
243
|
# Put the whole block as a chunk
|
242
|
-
code, data = _resumable_put_block(uptoken, fh, block_index, block_size, block_size, progresses[block_index], Config.settings[:max_retry_times], chunk_notifier)
|
244
|
+
code, data = _resumable_put_block(bucket, uptoken, fh, block_index, block_size, block_size, progresses[block_index], Config.settings[:max_retry_times], chunk_notifier)
|
243
245
|
if HTTP.is_response_ok?(code)
|
244
246
|
#checksums[block_index] = data["checksum"]
|
245
247
|
checksums[block_index] = data["ctx"]
|
@@ -299,7 +301,7 @@ module Qiniu
|
|
299
301
|
checksums = []
|
300
302
|
block_count.times{checksums << ''}
|
301
303
|
|
302
|
-
code, data, raw_headers = _resumable_put(uptoken, fh, checksums, progresses, block_notifier, chunk_notifier)
|
304
|
+
code, data, raw_headers = _resumable_put(bucket, uptoken, fh, checksums, progresses, block_notifier, chunk_notifier)
|
303
305
|
|
304
306
|
if HTTP.is_response_ok?(code)
|
305
307
|
uphost = data["host"]
|
data/lib/qiniu/upload.rb
CHANGED
@@ -32,7 +32,7 @@ module Qiniu
|
|
32
32
|
end
|
33
33
|
callback_query_string = HTTP.generate_query_string(callback_params)
|
34
34
|
|
35
|
-
url = Config.
|
35
|
+
url = Config.up_host(bucket) + '/upload'
|
36
36
|
post_data = {
|
37
37
|
:params => callback_query_string,
|
38
38
|
:action => action_params,
|
@@ -52,7 +52,7 @@ module Qiniu
|
|
52
52
|
x_vars = nil,
|
53
53
|
opts = {})
|
54
54
|
### 构造URL
|
55
|
-
url = Config.
|
55
|
+
url = Config.up_host(opts[:bucket])
|
56
56
|
url[/\/*$/] = ''
|
57
57
|
url += '/'
|
58
58
|
|
@@ -80,6 +80,8 @@ module Qiniu
|
|
80
80
|
|
81
81
|
### 发送请求
|
82
82
|
HTTP.api_post(url, post_data)
|
83
|
+
rescue BucketIsMissing
|
84
|
+
raise 'upload_with_token_2 requires :bucket option when multi_region is enabled'
|
83
85
|
end # upload_with_token_2
|
84
86
|
|
85
87
|
def upload_buffer_with_token(uptoken,
|
@@ -88,7 +90,7 @@ module Qiniu
|
|
88
90
|
x_vars = nil,
|
89
91
|
opts = {})
|
90
92
|
### 构造 URL
|
91
|
-
url = Config.
|
93
|
+
url = Config.up_host(opts[:bucket])
|
92
94
|
url[/\/*$/] = ''
|
93
95
|
url += '/'
|
94
96
|
|
@@ -125,6 +127,8 @@ module Qiniu
|
|
125
127
|
|
126
128
|
### 发送请求
|
127
129
|
HTTP.api_post(url, post_data)
|
130
|
+
rescue BucketIsMissing
|
131
|
+
raise 'upload_buffer_with_token requires :bucket option when multi_region is enabled'
|
128
132
|
end # upload_with_token_2
|
129
133
|
|
130
134
|
### 授权举例
|
@@ -147,6 +151,8 @@ module Qiniu
|
|
147
151
|
end
|
148
152
|
|
149
153
|
return upload_with_token_2(uptoken, local_file, key, x_vars, opts)
|
154
|
+
rescue BucketIsMissing
|
155
|
+
raise 'upload_with_put_policy requires :bucket option when multi_region is enabled'
|
150
156
|
end # upload_with_put_policy
|
151
157
|
|
152
158
|
def upload_buffer_with_put_policy(put_policy,
|
@@ -160,6 +166,8 @@ module Qiniu
|
|
160
166
|
end
|
161
167
|
|
162
168
|
return upload_buffer_with_token(uptoken, buf, key, x_vars, opts)
|
169
|
+
rescue BucketIsMissing
|
170
|
+
raise 'upload_buffer_with_put_policy requires :bucket option when multi_region is enabled'
|
163
171
|
end # upload_buffer_with_put_policy
|
164
172
|
|
165
173
|
private
|
data/lib/qiniu/version.rb
CHANGED
data/spec/qiniu/auth_spec.rb
CHANGED
@@ -29,7 +29,10 @@ module Qiniu
|
|
29
29
|
pp = Auth::PutPolicy.new(@bucket, key)
|
30
30
|
code, data, raw_headers = Qiniu::Storage.upload_with_put_policy(
|
31
31
|
pp,
|
32
|
-
__FILE__
|
32
|
+
__FILE__,
|
33
|
+
nil,
|
34
|
+
nil,
|
35
|
+
bucket: @bucket
|
33
36
|
)
|
34
37
|
code.should == 200
|
35
38
|
puts data.inspect
|
@@ -68,6 +71,24 @@ module Qiniu
|
|
68
71
|
code.should == 200
|
69
72
|
puts data.inspect
|
70
73
|
end
|
74
|
+
|
75
|
+
it "should generate uphosts and global for multi_region" do
|
76
|
+
origin_multi_region = Config.settings[:multi_region]
|
77
|
+
begin
|
78
|
+
Config.settings[:multi_region] = true
|
79
|
+
### 生成Key
|
80
|
+
key = 'a_private_file'
|
81
|
+
key = make_unique_key_in_bucket(key)
|
82
|
+
puts "key=#{key}"
|
83
|
+
|
84
|
+
### 生成 PutPolicy
|
85
|
+
pp = Auth::PutPolicy.new(@bucket, key)
|
86
|
+
expect(pp.instance_variable_get(:@uphosts)).to eq ["http://up.qiniu.com", "http://upload.qiniu.com", "-H up.qiniu.com http://183.136.139.16"]
|
87
|
+
expect(pp.instance_variable_get(:@global)).to be false
|
88
|
+
ensure
|
89
|
+
Config.settings[:multi_region] = origin_multi_region
|
90
|
+
end
|
91
|
+
end
|
71
92
|
end
|
72
93
|
end
|
73
94
|
|
@@ -9,31 +9,22 @@ require 'qiniu'
|
|
9
9
|
|
10
10
|
module Qiniu
|
11
11
|
module Storage
|
12
|
-
|
13
|
-
|
12
|
+
shared_examples "Management Specs" do
|
14
13
|
before :all do
|
15
|
-
@bucket = 'rubysdk'
|
16
|
-
|
17
14
|
@key = Digest::SHA1.hexdigest((Time.now.to_i+rand(100)).to_s)
|
18
15
|
@key = make_unique_key_in_bucket(@key)
|
19
16
|
|
20
17
|
@key2 = @key + rand(100).to_s
|
21
|
-
end
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
__FILE__
|
33
|
-
)
|
34
|
-
code.should == 200
|
35
|
-
puts data.inspect
|
36
|
-
end
|
19
|
+
pp = Auth::PutPolicy.new(@bucket, @key)
|
20
|
+
code, data, raw_headers = Qiniu::Storage.upload_with_put_policy(
|
21
|
+
pp,
|
22
|
+
__FILE__,
|
23
|
+
nil,
|
24
|
+
nil,
|
25
|
+
bucket: @bucket
|
26
|
+
)
|
27
|
+
code.should == 200
|
37
28
|
end
|
38
29
|
|
39
30
|
### 列举Bucket
|
@@ -48,103 +39,136 @@ module Qiniu
|
|
48
39
|
context ".stat" do
|
49
40
|
it "should works" do
|
50
41
|
code, data = Storage.stat(@bucket, @key)
|
51
|
-
code.should == 200
|
52
42
|
puts data.inspect
|
43
|
+
code.should == 200
|
53
44
|
end
|
54
45
|
end
|
55
46
|
|
56
47
|
context ".get" do
|
57
48
|
it "should works" do
|
58
49
|
code, data = Storage.get(@bucket, @key)
|
59
|
-
code.should == 200
|
60
50
|
puts data.inspect
|
51
|
+
code.should == 200
|
61
52
|
end
|
62
53
|
end
|
63
54
|
|
64
55
|
context ".batch" do
|
65
56
|
it "should works" do
|
66
57
|
code, data = Storage.batch("stat", @bucket, [@key])
|
67
|
-
code.should == 200
|
68
58
|
puts data.inspect
|
59
|
+
code.should == 200
|
69
60
|
end
|
70
61
|
end
|
71
62
|
|
72
63
|
context ".batch_stat" do
|
73
64
|
it "should works" do
|
74
65
|
code, data = Storage.batch_stat(@bucket, [@key])
|
75
|
-
code.should == 200
|
76
66
|
puts data.inspect
|
67
|
+
code.should == 200
|
77
68
|
end
|
78
69
|
end
|
79
70
|
|
80
71
|
context ".batch_get" do
|
81
72
|
it "should works" do
|
82
73
|
code, data = Storage.batch_get(@bucket, [@key])
|
83
|
-
code.should == 200
|
84
74
|
puts data.inspect
|
75
|
+
code.should == 200
|
85
76
|
end
|
86
77
|
end
|
87
78
|
|
88
79
|
context ".batch_copy" do
|
89
80
|
it "should works" do
|
90
81
|
code, data = Storage.batch_copy @bucket, @key, @bucket, @key2
|
91
|
-
code.should == 200
|
92
82
|
puts data.inspect
|
83
|
+
code.should == 200
|
93
84
|
|
94
85
|
code, data = Storage.delete @bucket, @key2
|
95
|
-
code.should == 200
|
96
86
|
puts data.inspect
|
87
|
+
code.should == 200
|
97
88
|
end
|
98
89
|
end
|
99
90
|
|
100
91
|
context ".batch_move" do
|
101
92
|
it "should works" do
|
102
93
|
code, data = Storage.batch_move [@bucket, @key, @bucket, @key2]
|
103
|
-
code.should == 200
|
104
94
|
puts data.inspect
|
95
|
+
code.should == 200
|
105
96
|
|
106
97
|
code3, data3 = Storage.batch_move [@bucket, @key2, @bucket, @key]
|
107
|
-
code3.should == 200
|
108
98
|
puts data3.inspect
|
99
|
+
code3.should == 200
|
109
100
|
end
|
110
101
|
end
|
111
102
|
|
112
103
|
context ".move" do
|
113
104
|
it "should works" do
|
114
105
|
code, data = Storage.move(@bucket, @key, @bucket, @key2)
|
115
|
-
code.should == 200
|
116
106
|
puts data.inspect
|
107
|
+
code.should == 200
|
117
108
|
|
118
109
|
code2, data2 = Storage.stat(@bucket, @key2)
|
119
|
-
code2.should == 200
|
120
110
|
puts data2.inspect
|
111
|
+
code2.should == 200
|
121
112
|
|
122
113
|
code3, data3 = Storage.move(@bucket, @key2, @bucket, @key)
|
123
|
-
code3.should == 200
|
124
114
|
puts data3.inspect
|
115
|
+
code3.should == 200
|
125
116
|
end
|
126
117
|
end
|
127
118
|
|
128
119
|
context ".copy" do
|
129
120
|
it "should works" do
|
130
121
|
code, data = Storage.copy(@bucket, @key, @bucket, @key2)
|
131
|
-
code.should == 200
|
132
122
|
puts data.inspect
|
123
|
+
code.should == 200
|
133
124
|
|
134
125
|
code, data = Storage.delete(@bucket, @key2)
|
135
|
-
code.should == 200
|
136
126
|
puts data.inspect
|
127
|
+
code.should == 200
|
137
128
|
end
|
138
129
|
end
|
139
130
|
|
140
131
|
context ".delete" do
|
141
132
|
it "should works" do
|
142
133
|
code, data = Storage.delete(@bucket, @key)
|
134
|
+
puts data.inspect
|
135
|
+
code.should == 200
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context ".fetch" do
|
140
|
+
it "should works" do
|
141
|
+
code, data = Qiniu::Storage.fetch(@bucket, "https://www.baidu.com/robots.txt", @key)
|
143
142
|
code.should == 200
|
144
143
|
puts data.inspect
|
145
144
|
end
|
146
145
|
end
|
146
|
+
end
|
147
147
|
|
148
|
+
describe 'When multi_region is disabled' do
|
149
|
+
before :all do
|
150
|
+
Config.settings[:multi_region] = false
|
151
|
+
@bucket = 'rubysdk'
|
152
|
+
end
|
153
|
+
include_examples 'Management Specs'
|
154
|
+
end
|
155
|
+
|
156
|
+
describe 'When multi_region is enabled' do
|
157
|
+
describe 'for z0 bucket' do
|
158
|
+
before :all do
|
159
|
+
Config.settings[:multi_region] = true
|
160
|
+
@bucket = 'rubysdk'
|
161
|
+
end
|
162
|
+
include_examples 'Management Specs'
|
163
|
+
end
|
164
|
+
|
165
|
+
describe 'for z1 bucket' do
|
166
|
+
before :all do
|
167
|
+
Config.settings[:multi_region] = true
|
168
|
+
@bucket = 'rubysdk-bc'
|
169
|
+
end
|
170
|
+
include_examples 'Management Specs'
|
171
|
+
end
|
148
172
|
end
|
149
173
|
end # module Storage
|
150
174
|
end # module Qiniu
|
data/spec/qiniu/upload_spec.rb
CHANGED
@@ -8,11 +8,8 @@ require 'digest/sha1'
|
|
8
8
|
|
9
9
|
module Qiniu
|
10
10
|
module Storage
|
11
|
-
|
12
|
-
|
11
|
+
shared_examples "Upload Specs" do
|
13
12
|
before :all do
|
14
|
-
@bucket = 'rubysdk'
|
15
|
-
|
16
13
|
@key = Digest::SHA1.hexdigest((Time.now.to_i+rand(100)).to_s)
|
17
14
|
@key = make_unique_key_in_bucket(@key)
|
18
15
|
puts "key=#{@key}"
|
@@ -52,6 +49,12 @@ module Qiniu
|
|
52
49
|
|
53
50
|
### 测试单文件直传
|
54
51
|
context ".upload_with_token" do
|
52
|
+
after do
|
53
|
+
code, data = Qiniu::Storage.delete(@bucket, @key)
|
54
|
+
puts data.inspect
|
55
|
+
code.should == 200
|
56
|
+
end
|
57
|
+
|
55
58
|
it "should works" do
|
56
59
|
upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"}
|
57
60
|
uptoken = Qiniu.generate_upload_token(upopts)
|
@@ -68,26 +71,20 @@ module Qiniu
|
|
68
71
|
code.should == 200
|
69
72
|
puts data.inspect
|
70
73
|
puts raw_headers.inspect
|
71
|
-
end
|
72
|
-
end
|
73
74
|
|
74
|
-
context ".stat" do
|
75
|
-
it "should exists" do
|
76
75
|
code, data = Qiniu::Storage.stat(@bucket, @key)
|
77
76
|
puts data.inspect
|
78
77
|
code.should == 200
|
79
78
|
end
|
80
79
|
end
|
81
80
|
|
82
|
-
context ".
|
83
|
-
|
81
|
+
context ".upload_with_token_2" do
|
82
|
+
after do
|
84
83
|
code, data = Qiniu::Storage.delete(@bucket, @key)
|
85
84
|
puts data.inspect
|
86
85
|
code.should == 200
|
87
86
|
end
|
88
|
-
end
|
89
87
|
|
90
|
-
context ".upload_with_token_2" do
|
91
88
|
it "should works" do
|
92
89
|
upopts = {:scope => @bucket, :expires_in => 3600, :endUser => "why404@gmail.com"}
|
93
90
|
uptoken = Qiniu.generate_upload_token(upopts)
|
@@ -95,32 +92,28 @@ module Qiniu
|
|
95
92
|
code, data, raw_headers = Qiniu::Storage.upload_with_token_2(
|
96
93
|
uptoken,
|
97
94
|
__FILE__,
|
98
|
-
@key
|
95
|
+
@key,
|
96
|
+
nil,
|
97
|
+
bucket: @bucket
|
99
98
|
)
|
100
99
|
|
101
100
|
code.should == 200
|
102
101
|
puts data.inspect
|
103
102
|
puts raw_headers.inspect
|
104
|
-
end
|
105
|
-
end # .upload_with_token_2
|
106
103
|
|
107
|
-
context ".stat" do
|
108
|
-
it "should exists" do
|
109
104
|
code, data = Qiniu::Storage.stat(@bucket, @key)
|
110
105
|
puts data.inspect
|
111
106
|
code.should == 200
|
112
107
|
end
|
113
|
-
end
|
108
|
+
end # .upload_with_token_2
|
114
109
|
|
115
|
-
context ".
|
116
|
-
|
110
|
+
context ".upload_with_put_policy" do
|
111
|
+
after do
|
117
112
|
code, data = Qiniu::Storage.delete(@bucket, @key)
|
118
113
|
puts data.inspect
|
119
114
|
code.should == 200
|
120
115
|
end
|
121
|
-
end
|
122
116
|
|
123
|
-
context ".upload_with_put_policy" do
|
124
117
|
it "should works" do
|
125
118
|
pp = Qiniu::Auth::PutPolicy.new(@bucket, @key)
|
126
119
|
pp.end_user = "why404@gmail.com"
|
@@ -129,7 +122,9 @@ module Qiniu
|
|
129
122
|
code, data, raw_headers = Qiniu::Storage.upload_with_put_policy(
|
130
123
|
pp,
|
131
124
|
__FILE__,
|
132
|
-
@key + '-not-equal'
|
125
|
+
@key + '-not-equal',
|
126
|
+
nil,
|
127
|
+
bucket: @bucket
|
133
128
|
)
|
134
129
|
code.should_not == 200
|
135
130
|
puts data.inspect
|
@@ -138,16 +133,28 @@ module Qiniu
|
|
138
133
|
code, data, raw_headers = Qiniu::Storage.upload_with_put_policy(
|
139
134
|
pp,
|
140
135
|
__FILE__,
|
141
|
-
@key
|
136
|
+
@key,
|
137
|
+
nil,
|
138
|
+
bucket: @bucket
|
142
139
|
)
|
143
140
|
|
144
141
|
code.should == 200
|
145
142
|
puts data.inspect
|
146
143
|
puts raw_headers.inspect
|
144
|
+
|
145
|
+
code, data = Qiniu::Storage.stat(@bucket, @key)
|
146
|
+
puts data.inspect
|
147
|
+
code.should == 200
|
147
148
|
end
|
148
149
|
end # .upload_with_put_policy
|
149
150
|
|
150
151
|
context ".upload_buffer_with_put_policy" do
|
152
|
+
after do
|
153
|
+
code, data = Qiniu::Storage.delete(@bucket, @key)
|
154
|
+
puts data.inspect
|
155
|
+
code.should == 200
|
156
|
+
end
|
157
|
+
|
151
158
|
it "should works" do
|
152
159
|
pp = Qiniu::Auth::PutPolicy.new(@bucket, @key)
|
153
160
|
pp.end_user = "amethyst.black@gmail.com"
|
@@ -157,32 +164,28 @@ module Qiniu
|
|
157
164
|
code, data, raw_headers = Qiniu::Storage.upload_buffer_with_put_policy(
|
158
165
|
pp,
|
159
166
|
test_line,
|
160
|
-
@key
|
167
|
+
@key,
|
168
|
+
nil,
|
169
|
+
bucket: @bucket
|
161
170
|
)
|
162
171
|
code.should == 200
|
163
172
|
puts data.inspect
|
164
173
|
puts raw_headers.inspect
|
165
|
-
end
|
166
|
-
end # .upload_buffer_with_put_policy
|
167
174
|
|
168
|
-
context ".stat" do
|
169
|
-
it "should exists" do
|
170
175
|
code, data = Qiniu::Storage.stat(@bucket, @key)
|
171
176
|
puts data.inspect
|
172
177
|
code.should == 200
|
173
178
|
end
|
174
|
-
end
|
179
|
+
end # .upload_buffer_with_put_policy
|
175
180
|
|
176
|
-
|
177
|
-
|
178
|
-
|
181
|
+
### 测试断点续上传
|
182
|
+
context ".resumable_upload_with_token" do
|
183
|
+
after do
|
184
|
+
code, data = Qiniu::Storage.delete(@bucket, @key_5m)
|
179
185
|
puts data.inspect
|
180
186
|
code.should == 200
|
181
187
|
end
|
182
|
-
end
|
183
188
|
|
184
|
-
### 测试断点续上传
|
185
|
-
context ".resumable_upload_with_token" do
|
186
189
|
it "should works" do
|
187
190
|
upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"}
|
188
191
|
uptoken = Qiniu.generate_upload_token(upopts)
|
@@ -196,26 +199,20 @@ module Qiniu
|
|
196
199
|
puts data.inspect
|
197
200
|
puts raw_headers.inspect
|
198
201
|
puts "key_5m=#{@key_5m}"
|
199
|
-
end
|
200
|
-
end
|
201
202
|
|
202
|
-
context ".stat" do
|
203
|
-
it "should exists" do
|
204
203
|
code, data = Qiniu::Storage.stat(@bucket, @key_5m)
|
205
204
|
puts data.inspect
|
206
205
|
code.should == 200
|
207
206
|
end
|
208
207
|
end
|
209
208
|
|
210
|
-
context ".
|
211
|
-
|
212
|
-
code, data = Qiniu::Storage.delete(@bucket, @
|
209
|
+
context ".resumable_upload_with_token2" do
|
210
|
+
after do
|
211
|
+
code, data = Qiniu::Storage.delete(@bucket, @key_4m)
|
213
212
|
puts data.inspect
|
214
213
|
code.should == 200
|
215
214
|
end
|
216
|
-
end
|
217
215
|
|
218
|
-
context ".resumable_upload_with_token2" do
|
219
216
|
it "should works" do
|
220
217
|
upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"}
|
221
218
|
uptoken = Qiniu.generate_upload_token(upopts)
|
@@ -229,26 +226,20 @@ module Qiniu
|
|
229
226
|
puts data.inspect
|
230
227
|
puts raw_headers.inspect
|
231
228
|
puts "key_4m=#{@key_4m}"
|
232
|
-
end
|
233
|
-
end
|
234
229
|
|
235
|
-
context ".stat" do
|
236
|
-
it "should exists" do
|
237
230
|
code, data = Qiniu::Storage.stat(@bucket, @key_4m)
|
238
231
|
puts data.inspect
|
239
232
|
code.should == 200
|
240
233
|
end
|
241
234
|
end
|
242
235
|
|
243
|
-
context ".
|
244
|
-
|
245
|
-
code, data = Qiniu::Storage.delete(@bucket, @
|
236
|
+
context ".resumable_upload_with_token3" do
|
237
|
+
after do
|
238
|
+
code, data = Qiniu::Storage.delete(@bucket, @key_8m)
|
246
239
|
puts data.inspect
|
247
240
|
code.should == 200
|
248
241
|
end
|
249
|
-
end
|
250
242
|
|
251
|
-
context ".resumable_upload_with_token3" do
|
252
243
|
it "should works" do
|
253
244
|
upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"}
|
254
245
|
uptoken = Qiniu.generate_upload_token(upopts)
|
@@ -262,26 +253,20 @@ module Qiniu
|
|
262
253
|
puts data.inspect
|
263
254
|
puts raw_headers.inspect
|
264
255
|
puts "key_8m=#{@key_8m}"
|
265
|
-
end
|
266
|
-
end
|
267
256
|
|
268
|
-
context ".stat" do
|
269
|
-
it "should exists" do
|
270
257
|
code, data = Qiniu::Storage.stat(@bucket, @key_8m)
|
271
258
|
puts data.inspect
|
272
259
|
code.should == 200
|
273
260
|
end
|
274
261
|
end
|
275
262
|
|
276
|
-
context ".
|
277
|
-
|
278
|
-
code, data = Qiniu::Storage.delete(@bucket, @
|
263
|
+
context ".resumable_upload_with_token4" do
|
264
|
+
after do
|
265
|
+
code, data = Qiniu::Storage.delete(@bucket, @key_1m)
|
279
266
|
puts data.inspect
|
280
267
|
code.should == 200
|
281
268
|
end
|
282
|
-
end
|
283
269
|
|
284
|
-
context ".resumable_upload_with_token4" do
|
285
270
|
it "should works" do
|
286
271
|
upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"}
|
287
272
|
uptoken = Qiniu.generate_upload_token(upopts)
|
@@ -295,25 +280,51 @@ module Qiniu
|
|
295
280
|
puts data.inspect
|
296
281
|
puts raw_headers.inspect
|
297
282
|
puts "key_1m=#{@key_1m}"
|
298
|
-
end
|
299
|
-
end
|
300
283
|
|
301
|
-
context ".stat" do
|
302
|
-
it "should exists" do
|
303
284
|
code, data = Qiniu::Storage.stat(@bucket, @key_1m)
|
304
285
|
puts data.inspect
|
305
286
|
code.should == 200
|
306
287
|
end
|
307
288
|
end
|
289
|
+
end
|
308
290
|
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
291
|
+
describe 'When multi_region is disabled' do
|
292
|
+
before :all do
|
293
|
+
Config.settings[:multi_region] = false
|
294
|
+
@bucket = 'rubysdk'
|
295
|
+
end
|
296
|
+
include_examples 'Upload Specs'
|
297
|
+
end
|
298
|
+
|
299
|
+
describe 'When multi_region is enabled' do
|
300
|
+
describe 'for z0 bucket' do
|
301
|
+
before :all do
|
302
|
+
Config.settings[:multi_region] = true
|
303
|
+
@bucket = 'rubysdk'
|
314
304
|
end
|
305
|
+
include_examples 'Upload Specs'
|
315
306
|
end
|
316
307
|
|
308
|
+
describe 'for z1 bucket' do
|
309
|
+
before :all do
|
310
|
+
Config.settings[:multi_region] = true
|
311
|
+
@bucket = 'rubysdk-bc'
|
312
|
+
end
|
313
|
+
include_examples 'Upload Specs'
|
314
|
+
|
315
|
+
it 'should raise BucketIsMissing error' do
|
316
|
+
upopts = {:scope => @bucket, :expires_in => 3600, :endUser => "why404@gmail.com"}
|
317
|
+
uptoken = Qiniu.generate_upload_token(upopts)
|
318
|
+
|
319
|
+
expect do
|
320
|
+
Qiniu::Storage.upload_with_token_2(
|
321
|
+
uptoken,
|
322
|
+
__FILE__,
|
323
|
+
@key,
|
324
|
+
)
|
325
|
+
end.to raise_error('upload_with_token_2 requires :bucket option when multi_region is enabled')
|
326
|
+
end
|
327
|
+
end
|
317
328
|
end
|
318
329
|
end # module Storage
|
319
330
|
end # module Qiniu
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qiniu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- why404
|
@@ -9,104 +9,104 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-06-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0.9'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0.9'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rspec
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '2.11'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '2.11'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: fakeweb
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '1.3'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '1.3'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: json
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '1.8'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.8'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rest-client
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - ~>
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: 1.8.0
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - ~>
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: 1.8.0
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: mime-types
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: 2.4.0
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: 2.4.0
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: ruby-hmac
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- - ~>
|
102
|
+
- - "~>"
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0.4'
|
105
105
|
type: :runtime
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- - ~>
|
109
|
+
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0.4'
|
112
112
|
description: 'Qiniu Resource (Cloud) Storage SDK for Ruby. See: http://developer.qiniu.com/docs/v6/sdk/ruby-sdk.html'
|
@@ -116,9 +116,9 @@ executables: []
|
|
116
116
|
extensions: []
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
|
-
- .gitignore
|
120
|
-
- .rspec
|
121
|
-
- .travis.yml
|
119
|
+
- ".gitignore"
|
120
|
+
- ".rspec"
|
121
|
+
- ".travis.yml"
|
122
122
|
- CHANGELOG.md
|
123
123
|
- Gemfile
|
124
124
|
- LICENSE
|
@@ -128,7 +128,9 @@ files:
|
|
128
128
|
- examples/copy.rb
|
129
129
|
- examples/delete.rb
|
130
130
|
- examples/download.rb
|
131
|
+
- examples/fetch.rb
|
131
132
|
- examples/fops.rb
|
133
|
+
- examples/list.rb
|
132
134
|
- examples/move.rb
|
133
135
|
- examples/stat.rb
|
134
136
|
- examples/upload.rb
|
@@ -142,6 +144,7 @@ files:
|
|
142
144
|
- lib/qiniu/config.rb
|
143
145
|
- lib/qiniu/exceptions.rb
|
144
146
|
- lib/qiniu/fop.rb
|
147
|
+
- lib/qiniu/host_manager.rb
|
145
148
|
- lib/qiniu/http.rb
|
146
149
|
- lib/qiniu/image.rb
|
147
150
|
- lib/qiniu/log.rb
|
@@ -183,17 +186,17 @@ require_paths:
|
|
183
186
|
- lib
|
184
187
|
required_ruby_version: !ruby/object:Gem::Requirement
|
185
188
|
requirements:
|
186
|
-
- -
|
189
|
+
- - ">="
|
187
190
|
- !ruby/object:Gem::Version
|
188
191
|
version: '0'
|
189
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
193
|
requirements:
|
191
|
-
- -
|
194
|
+
- - ">="
|
192
195
|
- !ruby/object:Gem::Version
|
193
196
|
version: '0'
|
194
197
|
requirements: []
|
195
198
|
rubyforge_project:
|
196
|
-
rubygems_version: 2.
|
199
|
+
rubygems_version: 2.5.1
|
197
200
|
signing_key:
|
198
201
|
specification_version: 4
|
199
202
|
summary: Qiniu Resource (Cloud) Storage SDK for Ruby
|