upyun 1.0.2 → 1.0.3

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
2
  SHA1:
3
- metadata.gz: bfbd5be64ea11f088fedd5b5923496458ca543a9
4
- data.tar.gz: b269595a497748ecc3c744aa43595aa84d03ac69
3
+ metadata.gz: 8c53c29e162493c788f931b0eab39850a404fe70
4
+ data.tar.gz: 04a51ddba3f0eff2d3862ee4d3ede5d15f948a96
5
5
  SHA512:
6
- metadata.gz: 53fa5fce2ac4c9886659f080026136c8d2213724ac9904f2a77864d2c8045b57e9cc1bc9e7349ad51bd175dfa93c0bc2baa9f0985d04f29ce0d39db42c1822cf
7
- data.tar.gz: ec874df8d90f96dde3b8ace8d47bb9498120192221c032b9618bd457e516785d9d3ae6a9d9075733b6336a328efe495ec62a309496f6057e3dc342a63f12116b
6
+ metadata.gz: d26b50b05d5ed484d3b308676772fc84a9f6b2885baef919b421dd4d57dc8632c680510827aae5ef92f7cbabb221f45d328d02c5bd1cb7f91bf3129f83c848f9
7
+ data.tar.gz: 5f01e1b9c185217cca77b94ac433f2bd379632ee169caf17b74cf0f199044dcbc466fd1f272258b7481816d7c545a3619de251d0852723ff0085149aab5da069
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  ## CHANGE LOG
2
2
 
3
+ ### v1.0.3
4
+ - 请求失败时返回的 Hash 中增加 `:request_id` 字段;
5
+ - 对于图片空间,上传时返回的 Hash 中包含图片详情信息;
6
+ - 删除不必要的 gem 依赖;
7
+
3
8
  ### v1.0.2
4
9
  - 初始化实例的时候增加选项,特别地将连接超时时间设为 60s;
5
10
  - URL `encode`, `decode` 使用 `open-uri` 代替 `uri`;
data/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  在 `Gemfile` 中加入以下代码
14
14
 
15
15
  ```ruby
16
- gem 'upyun', '~> 1.0.1'
16
+ gem 'upyun', '~> 1.0.3'
17
17
  ```
18
18
 
19
19
  然后执行如下命令安装:
@@ -93,8 +93,12 @@ upyun.put('/save/to/path', 'file or binary', headers)
93
93
 
94
94
  **返回**
95
95
 
96
- 上传成功返回 `true`,失败返回一个 `Hash` 结构: `{error: {code: code, message: message}}`,
97
- 其中 `code` 为又拍云返回的错误码, `message` 为错误信息。
96
+ 上传成功返回 `true`,失败返回一个 `Hash` 结构: `{request_id: request_id, error: {code: code, message: message}}`,
97
+ 其中:
98
+
99
+ * `request_id` 为本次请求的请求码,由 UPYUN 本台返回,可用该值查询 UPYUN 日志;
100
+ * `code` 为又拍云返回的错误码;
101
+ * `message` 为错误信息;
98
102
 
99
103
 
100
104
  #### 下载文件
@@ -110,8 +114,13 @@ file = upyun.get('/path/to/file')
110
114
  * `'/path/to/file'`: 文件在 UPYUN 空间中的路径
111
115
 
112
116
  **返回**
113
- 下载成功返回文件信息,失败返回一个 `Hash`: `{error: {code: code, message: message}}`,
114
- 其中 `code` 为又拍云返回的错误码, `message` 为错误信息。
117
+ 下载成功返回文件信息,失败返回一个 `Hash`: `{request_id: request_id, error: {code: code, message: message}}`,
118
+ 其中:
119
+
120
+ * `request_id` 为本次请求的请求码,由 UPYUN 本台返回,可用该值查询 UPYUN 日志;
121
+ * `code` 为又拍云返回的错误码;
122
+ * `message` 为错误信息;
123
+
115
124
 
116
125
  ##### 保存文件至本地
117
126
 
@@ -125,7 +134,7 @@ upyun.get('/path/to/file', 'saved/foo.png')
125
134
  * `saved/foo.png`: 文件本地保存路径
126
135
 
127
136
  **返回**
128
- 下载成功返回获取的文件长度。
137
+ 下载成功返回获取的文件长度, 失败返回内容和上例一致。
129
138
 
130
139
 
131
140
  #### 获取文件信息
@@ -151,7 +160,7 @@ upyun.getinfo('/path/to/file')
151
160
  * `:file_size` 是文件的大小
152
161
  * `:file_date` 是文件最后的更改时间。
153
162
 
154
- 失败返回一个 `Hash`: `{error: {code: code, message: message}}`。
163
+ 失败返回一个 `Hash`: `{request_id: request_id, error: {code: code, message: message}}`。
155
164
 
156
165
 
157
166
  #### 删除文件或者目录
@@ -167,7 +176,7 @@ upyun.delete('/path/to/file')
167
176
 
168
177
  成功返回: `true`,
169
178
 
170
- 失败返回一个 `Hash`: `{error: {code: code, message: message}}`。
179
+ 失败返回一个 `Hash`: `{request_id: request_id, error: {code: code, message: message}}`。
171
180
 
172
181
  #### 创建目录
173
182
 
@@ -183,7 +192,7 @@ upyun.mkdir('/path/to/dir')
183
192
 
184
193
  成功返回: `true`,
185
194
 
186
- 失败返回一个 `Hash`: `{error: {code: code, message: message}}`。
195
+ 失败返回一个 `Hash`: `{request_id: request_id, error: {code: code, message: message}}`。
187
196
 
188
197
  #### 获取目录文件列表
189
198
 
@@ -202,7 +211,7 @@ upyun.getlist('/path/to/dir')
202
211
  {:name=>"bar.txt", :type=>:file, :length=>25, :last_modified=>1415261057}]
203
212
  ```
204
213
 
205
- 失败返回一个 `Hash`: `{error: {code: code, message: message}}`。
214
+ 失败返回一个 `Hash`: `{request_id: request_id, error: {code: code, message: message}}`。
206
215
 
207
216
  #### 获取空间使用情况
208
217
 
@@ -214,7 +223,7 @@ upyun.usage
214
223
 
215
224
  成功返回空间使用量(单位为 `Byte`): `12400`,
216
225
 
217
- 失败返回一个 `Hash`: `{error: {code: code, message: message}}`。
226
+ 失败返回一个 `Hash`: `{request_id: request_id, error: {code: code, message: message}}`。
218
227
 
219
228
  ### Form API 使用
220
229
 
data/lib/upyun/rest.rb CHANGED
@@ -25,7 +25,20 @@ module Upyun
25
25
  {body: file, length: file.length, headers: headers}
26
26
  end
27
27
 
28
- request(:put, path, options)
28
+ # If the type of current bucket is Picture,
29
+ # put an image maybe return a set of headers
30
+ # represent the image's metadata
31
+ # x-upyun-width
32
+ # x-upyun-height
33
+ # x-upyun-frames
34
+ # x-upyun-file-type
35
+ res = request(:put, path, options) do |hds|
36
+ hds.select { |k| k.to_s.match(/^x_upyun_/i) }.reduce({}) do |memo, (k, v)|
37
+ memo.merge!({k[8..-1].to_sym => /^\d+$/.match(v) ? v.to_i : v})
38
+ end
39
+ end
40
+
41
+ res == {} ? true : res
29
42
  end
30
43
 
31
44
  def get(path, savepath=nil)
@@ -38,10 +51,19 @@ module Upyun
38
51
  end
39
52
 
40
53
  def getinfo(path)
41
- hds = request(:head, path)
42
- hds = hds.key?(:error) ? hds : format_info(hds)
54
+ request(:head, path) do |hds|
55
+ # File info:
56
+ # x-upyun-file-type
57
+ # x-upyun-file-size
58
+ # x-upyun-file-date
59
+ hds.select { |k| k.to_s.match(/^x_upyun_file/i) }.reduce({}) do |memo, (k, v)|
60
+ memo.merge!({k[8..-1].to_sym => /^\d+$/.match(v) ? v.to_i : v})
61
+ end
62
+ end
43
63
  end
44
64
 
65
+ alias :head :getinfo
66
+
45
67
  def delete(path)
46
68
  request(:delete, path)
47
69
  end
@@ -54,8 +76,8 @@ module Upyun
54
76
  res = request(:get, path)
55
77
  return res if res.is_a?(Hash)
56
78
 
57
- res.split('\n').map do |f|
58
- attrs = f.split('\t')
79
+ res.split("\n").map do |f|
80
+ attrs = f.split("\t")
59
81
  {
60
82
  name: attrs[0],
61
83
  type: attrs[1] == 'N' ? :file : :folder,
@@ -76,19 +98,12 @@ module Upyun
76
98
 
77
99
  private
78
100
 
79
- def format_info(hds)
80
- selected = hds.select { |k| k.to_s.match(/^x_upyun/i) }
81
- selected.reduce({}) do |memo, (k, v)|
82
- memo.merge!({k[8..-1].to_sym => /^\d+$/.match(v) ? v.to_i : v})
83
- end
84
- end
85
-
86
101
  def fullpath(path)
87
- decoded = URI::encode(URI::decode(path.force_encoding('utf-8')))
102
+ decoded = URI::encode(URI::decode(path.to_s.force_encoding('utf-8')))
88
103
  "/#{@bucket}#{decoded.start_with?('/') ? decoded : '/' + decoded}"
89
104
  end
90
105
 
91
- def request(method, path, options={})
106
+ def request(method, path, options={}, &block)
92
107
  fullpath = fullpath(path)
93
108
  query = options[:query]
94
109
  fullpath_query = "#{fullpath}#{query.nil? ? '' : '?' + query}"
@@ -104,21 +119,32 @@ module Upyun
104
119
  if [:post, :patch, :put].include? method
105
120
  body = options[:body].nil? ? '' : options[:body]
106
121
  rest_client[fullpath_query].send(method, body, headers) do |res|
107
- res.code == 200 ? true : {error: {code: res.code, message: res.body}}
122
+ if res.code / 100 == 2
123
+ block_given? ? yield(res.headers) : true
124
+ else
125
+ {
126
+ request_id: res.headers[:x_request_id],
127
+ error: {code: res.code, message: res.body}
128
+ }
129
+ end
108
130
  end
131
+
109
132
  else
110
133
  rest_client[fullpath_query].send(method, headers) do |res|
111
- if res.code == 200
134
+ if res.code / 100 == 2
112
135
  case method
113
136
  when :get
114
137
  res.body
115
138
  when :head
116
- res.headers
139
+ yield(res.headers)
117
140
  else
118
141
  true
119
142
  end
120
143
  else
121
- {error: {code: res.code, message: res.body}}
144
+ {
145
+ request_id: res.headers[:x_request_id],
146
+ error: {code: res.code, message: res.body}
147
+ }
122
148
  end
123
149
  end
124
150
  end
data/lib/upyun/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Upyun
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
data/spec/upyun_spec.rb CHANGED
@@ -1,9 +1,11 @@
1
+ # encoding: utf-8
2
+
1
3
  require File.dirname(__FILE__) + '/spec_helper'
2
4
  require 'uri'
3
5
 
4
6
  describe "Upyun Restful API Basic testing" do
5
7
  before :all do
6
- @upyun = Upyun::Rest.new('sdkfile', 'tester', 'grjxv2mxELR3')
8
+ @upyun = Upyun::Rest.new('sdkfile', 'tester', 'grjxv2mxELR3', {}, Upyun::ED_TELECOM)
7
9
  @file = File.expand_path('../upyun.jpg', __FILE__)
8
10
  @str = 'This is a binary string, not a file'
9
11
  end
@@ -61,6 +63,16 @@ describe "Upyun Restful API Basic testing" do
61
63
  after(:all) { @upyun.delete(@path_cn) }
62
64
  end
63
65
 
66
+ it "put a file to Picture bucket should return the image's metadata" do
67
+ upyunp = Upyun::Rest.new('sdkimg', 'tester', 'grjxv2mxELR3', {}, Upyun::ED_TELECOM)
68
+ metas = upyunp.put(@path, @file, content_type: 'image/jpeg')
69
+ expect(metas).to include(:width, :height, :frames, :file_type)
70
+ expect(metas[:width].is_a?(Integer))
71
+ expect(metas[:height].is_a?(Integer))
72
+ expect(metas[:frames].is_a?(Integer))
73
+ expect(metas[:file_type].is_a?(String))
74
+ end
75
+
64
76
  after { @upyun.delete(@path) }
65
77
  end
66
78
 
@@ -121,7 +133,7 @@ describe "Upyun Restful API Basic testing" do
121
133
  end
122
134
 
123
135
  describe ".mkdir" do
124
- before(:all) { @path = '/ruby-skd/foo/dir' }
136
+ before(:all) { @path = '/ruby-sdk/foo/dir' }
125
137
 
126
138
  it "should success" do
127
139
  expect(@upyun.mkdir(@path)).to be true
@@ -131,9 +143,22 @@ describe "Upyun Restful API Basic testing" do
131
143
  end
132
144
 
133
145
  describe ".getlist" do
146
+ before :all do
147
+ @dir = '/ruby-sdk/foo'
148
+ 10.times { |i| @upyun.put("#@dir/#{i}", @file) }
149
+ end
150
+
134
151
  it "should get a list of file record" do
135
152
  expect(@upyun.getlist("/")).to be_instance_of(Array)
136
153
  end
154
+
155
+ it "should return the correct number of records" do
156
+ expect(@upyun.getlist(@dir).length).to eq(10)
157
+ end
158
+
159
+ after :all do
160
+ 10.times { |i| @upyun.delete("#@dir/#{i}") }
161
+ end
137
162
  end
138
163
 
139
164
  describe ".usage" do
data/upyun.gemspec CHANGED
@@ -19,10 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "rest-client", ">= 1.6.7"
22
- spec.add_dependency "activesupport", "~> 4.1.0"
22
+ spec.add_dependency "activesupport"
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.7"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.1.0"
24
+ spec.add_development_dependency "rspec", "~> 2.6"
27
25
  end
28
26
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: upyun
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - jsvisa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-19 00:00:00.000000000 Z
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -28,58 +28,30 @@ dependencies:
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
- version: 4.1.0
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
39
- - !ruby/object:Gem::Version
40
- version: 4.1.0
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ~>
46
- - !ruby/object:Gem::Version
47
- version: '1.7'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '1.7'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '10.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ~>
38
+ - - '>='
67
39
  - !ruby/object:Gem::Version
68
- version: '10.0'
40
+ version: '0'
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: rspec
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
45
  - - ~>
74
46
  - !ruby/object:Gem::Version
75
- version: 3.1.0
47
+ version: '2.6'
76
48
  type: :development
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
52
  - - ~>
81
53
  - !ruby/object:Gem::Version
82
- version: 3.1.0
54
+ version: '2.6'
83
55
  description: UPYUN Rest API and Form API SDK
84
56
  email:
85
57
  - delweng@gmail.com
@@ -133,3 +105,4 @@ test_files:
133
105
  - spec/spec_helper.rb
134
106
  - spec/upyun.jpg
135
107
  - spec/upyun_spec.rb
108
+ has_rdoc: