qiniu-rs 3.3.1 → 3.4.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.
data/CHANGELOG.md CHANGED
@@ -1,7 +1,15 @@
1
1
  ## CHANGE LOG
2
2
 
3
- ### v3.3.1
3
+ ### v3.4.0
4
+
5
+ 增加文件复制/移动方法,包括批量复制/移动文件
4
6
 
7
+ - `Qiniu::RS.copy(source_bucket, source_key, target_bucket, target_key)`
8
+ - `Qiniu::RS.move(source_bucket, source_key, target_bucket, target_key)`
9
+ - `Qiniu::RS.batch_copy [source_bucket, source_key, target_bucket, target_key], ...`
10
+ - `Qiniu::RS.batch_move [source_bucket, source_key, target_bucket, target_key], ...`
11
+
12
+ ### v3.3.1
5
13
 
6
14
  确保单元测试里边用到的测试 Bucket 全局唯一
7
15
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qiniu-rs (3.3.1)
4
+ qiniu-rs (3.4.0)
5
5
  json (~> 1.7)
6
6
  mime-types (~> 1.19)
7
7
  rest-client (~> 1.6)
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 why404
1
+ Copyright (c) 2012-2013 qiniutek.com
2
2
 
3
3
  MIT License
4
4
 
data/docs/README.md CHANGED
@@ -6,7 +6,7 @@ title: Ruby SDK 使用指南 | 七牛云存储
6
6
 
7
7
  此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](/v3/api/) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
8
8
 
9
- 七牛云存储 Ruby SDK 源码地址:<https://github.com/qiniu/ruby-sdk>
9
+ 七牛云存储 Ruby SDK 源码地址:<https://github.com/qiniu/ruby-sdk> [![Build Status](https://api.travis-ci.org/qiniu/ruby-sdk.png?branch=master)](https://travis-ci.org/qiniu/ruby-sdk) [![Dependency Status](https://gemnasium.com/why404/qiniu-rs-for-ruby.png)](https://gemnasium.com/why404/qiniu-rs-for-ruby)
10
10
 
11
11
  **目录**
12
12
 
@@ -186,10 +186,10 @@ title: Ruby SDK 使用指南 | 七牛云存储
186
186
  : 必须,字符串类型(String),本地文件可被读取的有效路径
187
187
 
188
188
  :bucket
189
- : 必须,字符串类型(String),类似传统数据库里边的表名称,我们暂且将其叫做“资源表”,指定将该数据属性信息存储到具体的资源表中 。
189
+ : 必须,字符串类型(String),空间名称。
190
190
 
191
191
  :key
192
- : 必须,字符串类型(String),类似传统数据库里边某个表的主键ID,给每一个文件一个UUID用于进行标示。
192
+ : 必须,字符串类型(String),若把 Bucket 理解为关系性数据库的某个表,那么 key 类似数据库里边某个表的主键ID,需给每一个文件一个UUID用于进行标示。
193
193
 
194
194
  :mime_type
195
195
  : 可选,字符串类型(String),文件的 mime-type 值。如若不传入,SDK 会自行计算得出,若计算失败缺省使用 application/octet-stream 代替之。
@@ -364,10 +364,10 @@ pattern
364
364
  **参数**
365
365
 
366
366
  bucket
367
- : 必须,字符串类型(String),类似传统数据库里边的表名称,我们暂且将其叫做“资源表”,每份数据是属性信息都存储到具体的 bucket(资源表)中 。
367
+ : 必须,字符串类型(String),空间名称。
368
368
 
369
369
  key
370
- : 必须,字符串类型(String),类似传统数据库里边某个表的主键ID,每一个文件最终都用一个唯一 `key` 进行标示。
370
+ : 必须,字符串类型(String),若把 Bucket 理解为关系性数据库的某个表,那么 key 类似数据库里边某个表的主键ID,需给每一个文件一个UUID用于进行标示。
371
371
 
372
372
  **返回值**
373
373
 
@@ -392,6 +392,61 @@ mimeType
392
392
  putTime
393
393
  : 上传时间,单位是 百纳秒
394
394
 
395
+
396
+ <a name="copy"></a>
397
+
398
+ #### 复制单个文件
399
+
400
+ Qiniu::RS.copy(source_bucket, source_key, target_bucket, target_key)
401
+
402
+ 可以通过 SDK 提供的 `Qiniu::RS.copy` 函数进行文件复制操作。
403
+
404
+ **参数**
405
+
406
+ source_bucket
407
+ : 必须,字符串类型(String),指定源空间。
408
+
409
+ source_key
410
+ : 必须,字符串类型(String),指定源文件。
411
+
412
+ target_bucket
413
+ : 必须,字符串类型(String),指定要复制到的目标空间。
414
+
415
+ target_key
416
+ : 必须,字符串类型(String),指定要复制到目标空间的目标文件名。
417
+
418
+ **返回值**
419
+
420
+ 如果请求失败,返回 `false`;否则返回 `true` 。
421
+
422
+
423
+ <a name="move"></a>
424
+
425
+ #### 移动单个文件
426
+
427
+ Qiniu::RS.move(source_bucket, source_key, target_bucket, target_key)
428
+
429
+ 可以通过 SDK 提供的 `Qiniu::RS.move` 函数进行文件移动操作。
430
+
431
+ **参数**
432
+
433
+ source_bucket
434
+ : 必须,字符串类型(String),指定源空间。
435
+
436
+ source_key
437
+ : 必须,字符串类型(String),指定源文件。
438
+
439
+ target_bucket
440
+ : 必须,字符串类型(String),指定要移动到的目标空间。
441
+
442
+ target_key
443
+ : 必须,字符串类型(String),指定要移动到目标空间的目标文件名。
444
+
445
+ **返回值**
446
+
447
+ 如果请求失败,返回 `false`;否则返回 `true` 。
448
+
449
+
395
450
  <a name="delete"></a>
396
451
 
397
452
  ### 删除单个文件
@@ -403,10 +458,10 @@ putTime
403
458
  **参数**
404
459
 
405
460
  bucket
406
- : 必须,字符串类型(String),类似传统数据库里边的表名称,我们暂且将其叫做“资源表”,每份数据是属性信息都存储到具体的 bucket(资源表)中 。
461
+ : 必须,字符串类型(String),空间名称。
407
462
 
408
463
  key
409
- : 必须,字符串类型(String),类似传统数据库里边某个表的主键ID,每一个文件最终都用一个唯一 `key` 进行标示。
464
+ : 必须,字符串类型(String),若把 Bucket 理解为关系性数据库的某个表,那么 key 类似数据库里边某个表的主键ID,需给每一个文件一个UUID用于进行标示。
410
465
 
411
466
  **返回值**
412
467
 
@@ -427,7 +482,7 @@ command
427
482
  : 必须,字符串类型(String),其值可以是 `stat`, `get`, `delete` 中的一种
428
483
 
429
484
  bucket
430
- : 必须,字符串类型(String),类似传统数据库里边的表名称,我们暂且将其叫做“资源表”,每份数据是属性信息都存储到具体的 bucket(资源表)中 。
485
+ : 必须,字符串类型(String),空间名称。
431
486
 
432
487
  keys
433
488
  : 必须,数组类型(Array),所要操作 `key` 的集合。
@@ -461,7 +516,7 @@ keys
461
516
  **参数**
462
517
 
463
518
  bucket
464
- : 必须,字符串类型(String),类似传统数据库里边的表名称,我们暂且将其叫做“资源表”,每份数据是属性信息都存储到具体的 bucket(资源表)中 。
519
+ : 必须,字符串类型(String),空间名称。
465
520
 
466
521
  keys
467
522
  : 必须,数组类型(Array),所要操作 `key` 的集合。
@@ -484,6 +539,41 @@ keys
484
539
  ...
485
540
  ]
486
541
 
542
+
543
+ <a name="batch-copy"></a>
544
+
545
+ #### 批量复制文件
546
+
547
+ Qiniu::RS.batch_copy(*args)
548
+
549
+ 等价于,
550
+
551
+ Qiniu::RS.batch_copy [source_bucket, source_key, target_bucket, target_key], ...
552
+
553
+ `Qiniu::RS.batch_copy()` 的参数是一个可变长数组,其中每个数组其元素含义同 `Qiniu::RS.copy` 的参数一样。
554
+
555
+ **返回值**
556
+
557
+ 如果批量删除成功,返回 `true` ,否则为 `false` 。
558
+
559
+
560
+ <a name="batch-move"></a>
561
+
562
+ #### 批量移动文件
563
+
564
+ Qiniu::RS.batch_move(*args)
565
+
566
+ 等价于,
567
+
568
+ Qiniu::RS.batch_move [source_bucket, source_key, target_bucket, target_key], ...
569
+
570
+ `Qiniu::RS.batch_move()` 的参数是一个可变长数组,其中每个数组其元素含义同 `Qiniu::RS.move` 的参数一样。
571
+
572
+ **返回值**
573
+
574
+ 如果批量删除成功,返回 `true` ,否则为 `false` 。
575
+
576
+
487
577
  <a name="batch-delete"></a>
488
578
 
489
579
  #### 批量删除文件
data/lib/qiniu/rs.rb CHANGED
@@ -63,6 +63,7 @@ module Qiniu
63
63
  code == StatusOK
64
64
  end
65
65
 
66
+ =begin
66
67
  def set_watermark(customer_id, options = {})
67
68
  code, data = EU.set_watermark(customer_id, options)
68
69
  code == StatusOK
@@ -72,6 +73,7 @@ module Qiniu
72
73
  code, data = EU.get_watermark(customer_id)
73
74
  code == StatusOK ? data : false
74
75
  end
76
+ =end
75
77
 
76
78
  def put_auth(expires_in = nil, callback_url = nil)
77
79
  code, data = IO.put_auth(expires_in, callback_url)
@@ -149,6 +151,16 @@ module Qiniu
149
151
  code == StatusOK ? data["url"] : false
150
152
  end
151
153
 
154
+ def copy(source_bucket, source_key, target_bucket, target_key)
155
+ code, data = RS.copy(source_bucket, source_key, target_bucket, target_key)
156
+ code == StatusOK
157
+ end
158
+
159
+ def move(source_bucket, source_key, target_bucket, target_key)
160
+ code, data = RS.move(source_bucket, source_key, target_bucket, target_key)
161
+ code == StatusOK
162
+ end
163
+
152
164
  def delete(bucket, key)
153
165
  code, data = RS.delete(bucket, key)
154
166
  code == StatusOK
@@ -169,6 +181,16 @@ module Qiniu
169
181
  code == StatusOK ? data : false
170
182
  end
171
183
 
184
+ def batch_copy(*args)
185
+ code, data = RS.batch_copy(args)
186
+ code == StatusOK
187
+ end
188
+
189
+ def batch_move(*args)
190
+ code, data = RS.batch_move(args)
191
+ code == StatusOK
192
+ end
193
+
172
194
  def batch_download(bucket, keys)
173
195
  code, data = RS.batch_get(bucket, keys)
174
196
  return false unless code == StatusOK
data/lib/qiniu/rs/rs.rb CHANGED
@@ -26,6 +26,16 @@ module Qiniu
26
26
  Auth.request url
27
27
  end
28
28
 
29
+ def copy(source_bucket, source_key, target_bucket, target_key)
30
+ uri = _generate_cp_or_mv_opstr('copy', source_bucket, source_key, target_bucket, target_key)
31
+ Auth.request Config.settings[:rs_host] + uri
32
+ end
33
+
34
+ def move(source_bucket, source_key, target_bucket, target_key)
35
+ uri = _generate_cp_or_mv_opstr('move', source_bucket, source_key, target_bucket, target_key)
36
+ Auth.request Config.settings[:rs_host] + uri
37
+ end
38
+
29
39
  def delete(bucket, key)
30
40
  Auth.request Config.settings[:rs_host] + '/delete/' + encode_entry_uri(bucket, key)
31
41
  end
@@ -61,6 +71,14 @@ module Qiniu
61
71
  batch("stat", bucket, keys)
62
72
  end
63
73
 
74
+ def batch_copy(*args)
75
+ _batch_cp_or_mv('copy', args)
76
+ end
77
+
78
+ def batch_move(*args)
79
+ _batch_cp_or_mv('move', args)
80
+ end
81
+
64
82
  def batch_delete(bucket, keys)
65
83
  batch("delete", bucket, keys)
66
84
  end
@@ -77,6 +95,22 @@ module Qiniu
77
95
  save_as(bucket, key, source_image_url, mogrify_params_string)
78
96
  end
79
97
 
98
+ private
99
+
100
+ def _generate_cp_or_mv_opstr(command, source_bucket, source_key, target_bucket, target_key)
101
+ source_encoded_entry_uri = encode_entry_uri(source_bucket, source_key)
102
+ target_encoded_entry_uri = encode_entry_uri(target_bucket, target_key)
103
+ %Q(/#{command}/#{source_encoded_entry_uri}/#{target_encoded_entry_uri})
104
+ end
105
+
106
+ def _batch_cp_or_mv(command, *op_args)
107
+ execs = []
108
+ op_args.each do |e|
109
+ execs << 'op=' + _generate_cp_or_mv_opstr(command, e[0], e[1], e[2], e[3]) if e.size == 4
110
+ end
111
+ Auth.request Config.settings[:rs_host] + "/batch?" + execs.join("&")
112
+ end
113
+
80
114
  end
81
115
  end
82
116
  end
@@ -4,8 +4,8 @@ module Qiniu
4
4
  module RS
5
5
  module Version
6
6
  MAJOR = 3
7
- MINOR = 3
8
- PATCH = 1
7
+ MINOR = 4
8
+ PATCH = 0
9
9
  # Returns a version string by joining <tt>MAJOR</tt>, <tt>MINOR</tt>, and <tt>PATCH</tt> with <tt>'.'</tt>
10
10
  #
11
11
  # Example
@@ -13,6 +13,7 @@ module Qiniu
13
13
  before :all do
14
14
  @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s
15
15
  @key = Digest::SHA1.hexdigest((Time.now.to_i+rand(100)).to_s)
16
+ @key2 = @key + rand(100).to_s
16
17
  #@domain = @bucket + '.dn.qbox.me'
17
18
 
18
19
  code, data = Qiniu::RS::RS.mkbucket(@bucket)
@@ -89,6 +90,34 @@ module Qiniu
89
90
  end
90
91
  end
91
92
 
93
+ context ".batch_copy" do
94
+ it "should works" do
95
+ code, data = Qiniu::RS::RS.batch_copy [@bucket, @key, @bucket, @key2]
96
+ code.should == 200
97
+ puts data.inspect
98
+
99
+ #code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2)
100
+ #code2.should == 200
101
+ #puts data2.inspect
102
+ end
103
+ end
104
+
105
+ context ".batch_move" do
106
+ it "should works" do
107
+ code, data = Qiniu::RS::RS.batch_move [@bucket, @key, @bucket, @key2]
108
+ code.should == 200
109
+ puts data.inspect
110
+
111
+ #code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2)
112
+ #code2.should == 200
113
+ #puts data2.inspect
114
+
115
+ code3, data3 = Qiniu::RS::RS.batch_move [@bucket, @key2, @bucket, @key]
116
+ code3.should == 200
117
+ puts data3.inspect
118
+ end
119
+ end
120
+
92
121
  =begin
93
122
  context ".publish" do
94
123
  it "should works" do
@@ -107,6 +136,34 @@ module Qiniu
107
136
  end
108
137
  =end
109
138
 
139
+ context ".copy" do
140
+ it "should works" do
141
+ code, data = Qiniu::RS::RS.copy(@bucket, @key, @bucket, @key2)
142
+ code.should == 200
143
+ puts data.inspect
144
+
145
+ #code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2)
146
+ #code2.should == 200
147
+ #puts data2.inspect
148
+ end
149
+ end
150
+
151
+ context ".move" do
152
+ it "should works" do
153
+ code, data = Qiniu::RS::RS.move(@bucket, @key, @bucket, @key2)
154
+ code.should == 200
155
+ puts data.inspect
156
+
157
+ code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2)
158
+ code2.should == 200
159
+ puts data2.inspect
160
+
161
+ code3, data3 = Qiniu::RS::RS.move(@bucket, @key2, @bucket, @key)
162
+ code3.should == 200
163
+ puts data3.inspect
164
+ end
165
+ end
166
+
110
167
  context ".delete" do
111
168
  it "should works" do
112
169
  code, data = Qiniu::RS::RS.delete(@bucket, @key)
@@ -11,6 +11,7 @@ module Qiniu
11
11
  before :all do
12
12
  @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s
13
13
  @key = Digest::SHA1.hexdigest Time.now.to_s
14
+ @key2 = @key + rand(100).to_s
14
15
  #@domain = @bucket + '.dn.qbox.me'
15
16
 
16
17
  result = Qiniu::RS.mkbucket(@bucket)
@@ -295,6 +296,52 @@ module Qiniu
295
296
  end
296
297
  =end
297
298
 
299
+ context ".batch_copy" do
300
+ it "should works" do
301
+ result = Qiniu::RS.batch_copy [@bucket, @key, @bucket, @key2]
302
+ result.should_not be_false
303
+
304
+ #result2 = Qiniu::RS.stat(@bucket, @key2)
305
+ #result2.should_not be_false
306
+ end
307
+ end
308
+
309
+ context ".batch_move" do
310
+ it "should works" do
311
+ result = Qiniu::RS::RS.batch_move [@bucket, @key, @bucket, @key2]
312
+ result.should_not be_false
313
+
314
+ #result2 = Qiniu::RS.stat(@bucket, @key2)
315
+ #result2.should_not be_false
316
+
317
+ result3 = Qiniu::RS.batch_move [@bucket, @key2, @bucket, @key]
318
+ result3.should_not be_false
319
+ end
320
+ end
321
+
322
+ context ".copy" do
323
+ it "should works" do
324
+ result = Qiniu::RS.copy(@bucket, @key, @bucket, @key2)
325
+ result.should_not be_false
326
+
327
+ #result2 = Qiniu::RS.stat(@bucket, @key2)
328
+ #result2.should_not be_false
329
+ end
330
+ end
331
+
332
+ context ".move" do
333
+ it "should works" do
334
+ result = Qiniu::RS.move(@bucket, @key, @bucket, @key2)
335
+ result.should_not be_false
336
+
337
+ result2 = Qiniu::RS.stat(@bucket, @key2)
338
+ result2.should_not be_false
339
+
340
+ result3 = Qiniu::RS.move(@bucket, @key2, @bucket, @key)
341
+ result3.should_not be_false
342
+ end
343
+ end
344
+
298
345
  context ".delete" do
299
346
  it "should works" do
300
347
  result = Qiniu::RS.delete(@bucket, @key)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qiniu-rs
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.1
4
+ version: 3.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-06 00:00:00.000000000 Z
12
+ date: 2013-01-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -188,7 +188,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
188
  version: '0'
189
189
  segments:
190
190
  - 0
191
- hash: -1910839503800791135
191
+ hash: -3190608714994781075
192
192
  required_rubygems_version: !ruby/object:Gem::Requirement
193
193
  none: false
194
194
  requirements:
@@ -197,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
197
  version: '0'
198
198
  segments:
199
199
  - 0
200
- hash: -1910839503800791135
200
+ hash: -3190608714994781075
201
201
  requirements: []
202
202
  rubyforge_project:
203
203
  rubygems_version: 1.8.24