aliyunoss 0.1.2 → 0.1.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: 716bf19a85202b9dd54f69809b80edd10413d239
4
- data.tar.gz: e83b18486d76552130a8e897b9e8ea7c01cf90f9
3
+ metadata.gz: e0859a2ea3ada1c1b72d5aa4bf7c19b475f2eee2
4
+ data.tar.gz: 3097869be179d2db30cf5c62cbac7f30994bc0bc
5
5
  SHA512:
6
- metadata.gz: 8dba8f48ad17fafee1979d6dbf5d4fa60aa004c2fd6e0a67dd4345a6d8cb798017c2e204eab77bd72844f03956799de62e74f229fb81f79ff7e23dd0aae1fd58
7
- data.tar.gz: 804cd0ae4c9c6db0a8ad3702290be2eeb0d669a1a73df999a98565ecf8ea73fa44bbea870394095cc037d5a2d773c258d17de7677c31a4466133b76287f8ffa3
6
+ metadata.gz: dedf4b7a770d1cf47d24433121c873906be73773d80910a018f445f7e61a50eb9dba647d824d36747275113cb3ef9e6467d4bd6bb90657aff484ab8ee678f062
7
+ data.tar.gz: cf277b1cb70111c855c9a997e523940d5198f60290196db1b67c8bd6b4d3ae755e96dd5a9768bde540490c035f386b7668c5c31f08429a1f65ee5f24b600781c
data/Gemfile CHANGED
@@ -1,8 +1,6 @@
1
- source 'https://rubygems.org'
1
+ source 'https://ruby.taobao.org/'
2
2
 
3
3
  # Specify your gem's dependencies in aliyun-oss.gemspec
4
4
  gemspec
5
5
 
6
- gem 'nokogiri', '~> 1.6'
7
-
8
6
  gem 'byebug', :group => ['development', 'test']
data/aliyunoss.gemspec CHANGED
@@ -18,7 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6'
22
+
21
23
  spec.add_development_dependency "bundler", "~> 1.7"
22
24
  spec.add_development_dependency "rake", "~> 10.0"
23
25
  spec.add_development_dependency "rspec", "~> 3.1"
26
+
24
27
  end
@@ -0,0 +1,154 @@
1
+ # coding: utf-8
2
+ require 'base64'
3
+ require 'openssl'
4
+
5
+ module Aliyun
6
+ module Oss
7
+
8
+ class OssRequest
9
+
10
+ include ConfigHelper
11
+ attr_accessor :bucket, :path, :body, :queris, :domain
12
+
13
+ def initialize(bucket, path, domain = nil, queries = {}, headers = {})
14
+ @bucket = bucket
15
+ @path = path
16
+ @queries = queries
17
+ @domain = domain
18
+ @headers = {"Content-Type" => "", "Content-MD5" => "", "Date" => Time.now.utc.strftime('%a, %d %b %Y %H:%M:%S GMT')}.merge(headers)
19
+ end
20
+
21
+ def get_uri
22
+ if @domain
23
+ uri = URI("http://#{domain}/")
24
+ else
25
+ if @bucket
26
+ uri = URI("http://#{bucket.name}.#{bucket.location}.#{host}")
27
+ else
28
+ uri = URI("http://oss.#{host}")
29
+ end
30
+ end
31
+ uri.path = @path
32
+ uri.query = @queries.to_query_string if @queries.count > 0
33
+ uri
34
+ end
35
+
36
+ def self.add_operation(verb)
37
+ define_method(verb) do
38
+ uri = get_uri
39
+
40
+ request = Net::HTTP.send(:const_get, verb.to_s.capitalize).new(uri)
41
+
42
+ @headers.each_pair {|k,v| request[k] = v}
43
+
44
+ if @body
45
+ request.body = @body
46
+ digest = OpenSSL::Digest::MD5.digest(@body)
47
+ request['Content-MD5'] = Base64.encode64(digest).strip
48
+ request['Content-Length'] = @body.bytesize
49
+ end
50
+
51
+ request['Authorization'] = 'OSS ' + access_key_id + ':' +
52
+ signature(request)
53
+
54
+ logger.info(verb.to_s.upcase + ' ' + uri.to_s + ' ' + request.to_hash.to_s)
55
+
56
+ response = nil
57
+ Net::HTTP.start(uri.host, uri.port) do |http|
58
+ response = http.request(request)
59
+ logger.info(response.code.to_s + ' ' + response.message)
60
+ end
61
+ response
62
+ end
63
+ end
64
+
65
+ add_operation :get
66
+ add_operation :put
67
+ add_operation :delete
68
+ add_operation :head
69
+ add_operation :post
70
+
71
+ def url_for_sharing(expires_in)
72
+ uri = get_uri
73
+ request = Net::HTTP::Get.new(uri)
74
+ @headers.each_pair {|k,v| request[k] = v}
75
+ expires_at = (Time.now + expires_in).utc.to_i
76
+ request["Date"] = expires_at
77
+ uri.query = URI.encode_www_form({"OSSAccessKeyId" => access_key_id,
78
+ "Expires" => expires_at,
79
+ "Signature" => signature(request)})
80
+ uri.to_s
81
+ end
82
+
83
+ def [](key)
84
+ @headers[key]
85
+ end
86
+
87
+ def []=(key, value)
88
+ @headers[key] = value
89
+ end
90
+
91
+ private
92
+ def signature(req)
93
+ verb = req.class.to_s.gsub(/Net::HTTP::/, '').upcase
94
+ data = verb + "\n" + req["Content-MD5"] + "\n" +
95
+ req["Content-Type"] + "\n" + req["Date"] + "\n" +
96
+ canonicalized_oss_headers(req) +
97
+ canonicalized_resource()
98
+
99
+ digest = OpenSSL::Digest.new('sha1')
100
+ hmac = OpenSSL::HMAC.digest(digest, access_key_secret, data)
101
+ Base64.encode64(hmac).strip
102
+ end
103
+
104
+ # oss api 20140828.pdf - 4.2
105
+ # 1) 将所有以“x-oss-”为前缀的 HTTP 请求头的名字转换成小写字母。如 ’X-OSS-Meta-Name: TaoBao’
106
+ # 转换成 ’x-oss-meta-name: TaoBao’ 。
107
+ # 2) 将上一步得到的所有 HTTP 请求头按照字典序进行升序排列。
108
+ # 3) 如果有相同名字的请求头,则根据标准 RFC 2616, 4.2 章进行合并(两个值之间只用逗号分隔)。
109
+ # 如有两个名为’x-oss-meta-name’的请求头,对应的值分别为’TaoBao’和’Alipay’,则合并后
110
+ # 为: ’x-oss-meta-name:TaoBao,Alipay’ 。
111
+ # 4) 删除请求头和内容之间分隔符两端出现的任何空格。
112
+ # 如 ’x-oss-meta-name: TaoBao,Alipay’ 转换成: ’x-oss-meta-name:TaoBao,Alipay’ 。
113
+ # 5) 将所有的头和内容用 ’\n’ 分隔符分隔拼成最后的 CanonicalizedOSSHeader 。
114
+ def canonicalized_oss_headers(req)
115
+ hash = Hash.new
116
+ req.each_header do |header|
117
+ header = header.downcase
118
+ next unless header.start_with?('x-oss-')
119
+ if hash.has_key?(header)
120
+ hash[header] = hash[header] + "," + req[header].strip
121
+ else
122
+ hash[header] = req[header].strip
123
+ end
124
+ end
125
+
126
+ return "" if hash.count == 0
127
+ hash.keys.sort.map{|k| "#{k}:#{hash[k]}"}.join("\n") << "\n"
128
+ end
129
+
130
+ # oss api 20140828.pdf - 4.2
131
+ # 1) 将 CanonicalizedResource 置成空字符串( “” );
132
+ # 2) 放入要访问的 OSS 资源:“ /BucketName/ObjectName ”(无 ObjectName 则不填)
133
+ # 3) 如果请求的资源包括子资源 (sub-resource) ,那么将所有的子资源按照字典序,从小到大排列并
134
+ # 以 ’&’ 为分隔符生成子资源字符串。在 CanonicalizedResource 字符串尾添加“?”和子资源字
135
+ # 符串。此时的 CanonicalizedResource 例子如: /BucketName/ObjectName?acl &uploadId=UploadId
136
+ # 4) 如果用户请求在查询字符串 (query string) 中指定了要重写 (override) 返回请求的 header,那么将这
137
+ # 些查询字符串及其请求值按照字典序,从小到大排列,以 ’&’ 为分隔符,按参数的字典序添加到
138
+ # CanonicalizedResource 中。此时的 CanonicalizedResource 例子:
139
+ # /BucketName/ObjectName?acl&response-content-type=ContentType & uploadId =UploadId
140
+ def canonicalized_resource()
141
+ return @path unless @bucket
142
+ return "/#{@bucket.name}#{@path}" if @queries.count == 0
143
+
144
+ array = @queries.keys.sort.map do |k|
145
+ if @queries[k] then "#{k}=#{@queries[k]}" else "#{k}" end
146
+ end
147
+
148
+ "/#{@bucket.name}#{@path}?#{array.sort.join('&')}"
149
+ end
150
+
151
+ end
152
+
153
+ end
154
+ end
data/lib/aliyunoss/api.rb CHANGED
@@ -9,7 +9,7 @@ module Aliyun
9
9
 
10
10
  # List all buckets
11
11
  def list_bucket(params = {})
12
- Aliyun::Oss::OssRequest.new(nil, '/', params).get
12
+ Aliyun::Oss::OssRequest.new(nil, '/', nil, {}, {}).get
13
13
  end
14
14
  alias :get_service :list_bucket
15
15
 
@@ -34,49 +34,49 @@ HERE
34
34
 
35
35
  # Delete bucket logging
36
36
  def delete_logging(bucket)
37
- Aliyun::Oss::OssRequest.new(bucket, '/', 'logging'=>nil).delete
37
+ Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'logging'=>nil).delete
38
38
  end
39
39
 
40
40
  # Delete bucket website
41
41
  def delete_website(bucket)
42
- Aliyun::Oss::OssRequest.new(bucket, '/', 'website'=>nil).delete
42
+ Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'website'=>nil).delete
43
43
  end
44
44
  alias :disable_website :delete_website
45
45
 
46
46
  # List objects in bucket
47
47
  def list_object(bucket, queries = {})
48
- Aliyun::Oss::OssRequest.new(bucket, '/', queries).get
48
+ Aliyun::Oss::OssRequest.new(bucket, '/', nil, queries).get
49
49
  end
50
50
 
51
51
  # Get bucket acl
52
52
  def get_bucket_acl(bucket)
53
- Aliyun::Oss::OssRequest.new(bucket, '/', 'acl'=>nil).get
53
+ Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'acl'=>nil).get
54
54
  end
55
55
 
56
56
  # Get bucket location
57
57
  def get_bucket_location(bucket)
58
- Aliyun::Oss::OssRequest.new(bucket, '/', 'location'=>nil).get
58
+ Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'location'=>nil).get
59
59
  end
60
60
 
61
61
  # Query bucket logging status
62
62
  def get_bucket_logging(bucket)
63
- Aliyun::Oss::OssRequest.new(bucket, '/', 'logging'=>nil).get
63
+ Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'logging'=>nil).get
64
64
  end
65
65
 
66
66
  # Query bucket website status
67
67
  def get_bucket_website(bucket)
68
- Aliyun::Oss::OssRequest.new(bucket, '/', 'website'=>nil).get
68
+ Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'website'=>nil).get
69
69
  end
70
70
 
71
71
  # Set bucket acl permission
72
72
  def put_bucket_acl(bucket, permission)
73
- Aliyun::Oss::OssRequest.new(bucket, '/', {}, 'x-oss-acl'=> permission).put
73
+ Aliyun::Oss::OssRequest.new(bucket, '/', nil, {}, 'x-oss-acl'=> permission).put
74
74
  end
75
75
  alias :set_bucket_acl :put_bucket_acl
76
76
 
77
77
  # Enable or disable bucket logging
78
78
  def enable_bucket_logging(bucket, bucket_name_for_logging, log_prefix)
79
- request = Aliyun::Oss::OssRequest.new(bucket, '/', 'logging'=>nil)
79
+ request = Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'logging'=>nil)
80
80
  request.body = <<HERE
81
81
  <?xml version="1.0" encoding="UTF-8"?>
82
82
  <BucketLoggingStatus>
@@ -91,7 +91,7 @@ HERE
91
91
  end
92
92
 
93
93
  def disable_bucket_logging(bucket)
94
- request = Aliyun::Oss::OssRequest.new(bucket, '/', 'logging'=>nil)
94
+ request = Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'logging'=>nil)
95
95
  request.body = <<HERE
96
96
  <?xml version="1.0" encoding="UTF-8"?>
97
97
  <BucketLoggingStatus>
@@ -103,7 +103,7 @@ HERE
103
103
 
104
104
  # Set bucket website access
105
105
  def put_bucket_website(bucket, index_page, error_page)
106
- request = Aliyun::Oss::OssRequest.new(bucket, '/', 'website'=>nil)
106
+ request = Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'website'=>nil)
107
107
  request.body = <<HERE
108
108
  <?xml version="1.0" encoding="UTF-8"?>
109
109
  <WebsiteConfiguration>
@@ -123,7 +123,7 @@ HERE
123
123
  # Copy Object
124
124
  def copy_object(source_bucket, source_path, target_bucket, target_path, headers = {})
125
125
  headers = headers.merge({'x-oss-copy-source'=> "/" + source_bucket.name + source_path})
126
- Aliyun::Oss::OssRequest.new(target_bucket, target_path, {}, headers).put
126
+ Aliyun::Oss::OssRequest.new(target_bucket, target_path, nil, {}, headers).put
127
127
  end
128
128
 
129
129
  # Delete Object
@@ -138,24 +138,24 @@ HERE
138
138
  xml << "<Quiet>#{quiet_mode}</Quiet>"
139
139
  objects.each {|o| xml << "<Object><Key>#{o}</Key></Object>"}
140
140
  xml << '</Delete>'
141
- request = Aliyun::Oss::OssRequest.new(bucket, '/', 'delete'=>nil)
141
+ request = Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'delete'=>nil)
142
142
  request.body = xml
143
143
  request.post
144
144
  end
145
145
 
146
146
  # Get Object
147
147
  def get_object(bucket, path, headers = {})
148
- Aliyun::Oss::OssRequest.new(bucket, path, {}, headers).get
148
+ Aliyun::Oss::OssRequest.new(bucket, path, nil, {}, headers).get
149
149
  end
150
150
 
151
151
  # Head Object
152
152
  def head_object(bucket, path, headers = {})
153
- Aliyun::Oss::OssRequest.new(bucket, path, {}, headers).head
153
+ Aliyun::Oss::OssRequest.new(bucket, path, nil, {}, headers).head
154
154
  end
155
155
 
156
156
  # Put Object
157
157
  def put_object(bucket, path, data, headers = {})
158
- request = Aliyun::Oss::OssRequest.new(bucket, path, {}, headers)
158
+ request = Aliyun::Oss::OssRequest.new(bucket, path, nil, {}, headers)
159
159
  request.body = data
160
160
  request.put
161
161
  end
@@ -176,17 +176,17 @@ HERE
176
176
 
177
177
  # Multipart Initiate
178
178
  def multipart_upload_initiate(bucket, path)
179
- Aliyun::Oss::OssRequest.new(bucket, path, 'uploads'=>nil).post
179
+ Aliyun::Oss::OssRequest.new(bucket, path, nil, 'uploads'=>nil).post
180
180
  end
181
181
 
182
182
  def multipart_upload_part(bucket, path, upload_id, data, part_number)
183
- request = Aliyun::Oss::OssRequest.new(bucket, path, 'partNumber'=> part_number.to_s, 'uploadId'=> upload_id)
183
+ request = Aliyun::Oss::OssRequest.new(bucket, path, nil, 'partNumber'=> part_number.to_s, 'uploadId'=> upload_id)
184
184
  request.body = data
185
185
  request.put
186
186
  end
187
187
 
188
188
  def multipart_upload_from_copy(upload_id, source_bucket, source_path, target_bucket, target_path, part_number, part_size, range = nil)
189
- request = Aliyun::Oss::OssRequest.new(target_bucket, target_path, 'partNumber'=> part_number.to_s, 'uploadId'=> upload_id)
189
+ request = Aliyun::Oss::OssRequest.new(target_bucket, target_path, nil, 'partNumber'=> part_number.to_s, 'uploadId'=> upload_id)
190
190
  request['Content-Length'] = part_size
191
191
  request['x-oss-copy-source'] = "/" + source_bucket.name + source_path
192
192
  request['x-oss-copy-source-range'] = range if range
@@ -194,7 +194,7 @@ HERE
194
194
  end
195
195
 
196
196
  def multipart_upload_complete(bucket, path, upload_id, part_list)
197
- request = Aliyun::Oss::OssRequest.new(bucket, path, 'uploadId'=> upload_id)
197
+ request = Aliyun::Oss::OssRequest.new(bucket, path, nil, 'uploadId'=> upload_id)
198
198
  xml = '<?xml version="1.0" encoding="UTF-8"?>'
199
199
  xml << '<CompleteMultipartUpload>'
200
200
  part_list.each_pair {|k,v| xml << "<Part><PartNumber>#{k}</PartNumber><ETag>#{v}</ETag></Part>"}
@@ -204,15 +204,15 @@ HERE
204
204
  end
205
205
 
206
206
  def multipart_upload_abort(bucket, path, upload_id)
207
- Aliyun::Oss::OssRequest.new(bucket, path, 'uploadId'=> upload_id).delete
207
+ Aliyun::Oss::OssRequest.new(bucket, path, nil, 'uploadId'=> upload_id).delete
208
208
  end
209
209
 
210
210
  def multipart_upload_finished_parts(bucket, path, upload_id)
211
- Aliyun::Oss::OssRequest.new(bucket, path, 'uploadId'=> upload_id).get
211
+ Aliyun::Oss::OssRequest.new(bucket, path, nil, 'uploadId'=> upload_id).get
212
212
  end
213
213
 
214
214
  def multipart_upload_unfinished_task(bucket)
215
- Aliyun::Oss::OssRequest.new(bucket, '/', 'uploads'=>nil).get
215
+ Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'uploads'=>nil).get
216
216
  end
217
217
 
218
218
  end
@@ -2,7 +2,7 @@ module Aliyun
2
2
  module Oss
3
3
 
4
4
  class Bucket
5
- attr_accessor :location, :name, :creation_date
5
+ attr_accessor :location, :name, :creation_date, :domain, :extranet_endpoint, :intranet_endpoint
6
6
 
7
7
  def initialize(params = {})
8
8
  params.each_pair {|k,v| send("#{k.to_s}=", v) }
@@ -48,7 +48,7 @@ module Net
48
48
  nodes = Nokogiri::XML(self.body).xpath('//Bucket') rescue []
49
49
  nodes.map do |node|
50
50
  bucket = Aliyun::Oss::Bucket.new
51
- node.elements.each {|e| bucket.send("#{e.name.underscore}=".to_sym, e.content)}
51
+ node.elements.each {|e| bucket.send("#{e.name.underscore}=".to_sym, e.content) rescue nil }
52
52
  bucket
53
53
  end
54
54
  end
@@ -8,20 +8,25 @@ module Aliyun
8
8
  class OssRequest
9
9
 
10
10
  include ConfigHelper
11
- attr_accessor :bucket, :path, :body, :queris
11
+ attr_accessor :bucket, :path, :body, :queris, :domain
12
12
 
13
- def initialize(bucket, path, queries = {}, headers = {})
13
+ def initialize(bucket, path, domain = nil, queries = {}, headers = {})
14
14
  @bucket = bucket
15
15
  @path = path
16
16
  @queries = queries
17
+ @domain = domain
17
18
  @headers = {"Content-Type" => "", "Content-MD5" => "", "Date" => Time.now.utc.strftime('%a, %d %b %Y %H:%M:%S GMT')}.merge(headers)
18
19
  end
19
20
 
20
21
  def get_uri
21
- if @bucket
22
- uri = URI("http://#{bucket.name}.#{bucket.location}.#{host}")
22
+ if @domain
23
+ uri = URI("http://#{domain}/")
23
24
  else
24
- uri = URI("http://oss.#{host}")
25
+ if @bucket
26
+ uri = URI("http://#{bucket.name}.#{bucket.location}.#{host}")
27
+ else
28
+ uri = URI("http://oss.#{host}")
29
+ end
25
30
  end
26
31
  uri.path = @path
27
32
  uri.query = @queries.to_query_string if @queries.count > 0
@@ -109,7 +114,7 @@ module Aliyun
109
114
  def canonicalized_oss_headers(req)
110
115
  hash = Hash.new
111
116
  req.each_header do |header|
112
- header = header.downcase
117
+ header = header.to_s.downcase
113
118
  next unless header.start_with?('x-oss-')
114
119
  if hash.has_key?(header)
115
120
  hash[header] = hash[header] + "," + req[header].strip
@@ -1,5 +1,5 @@
1
1
  module Aliyun
2
2
  module Oss
3
- VERSION = "0.1.2"
3
+ VERSION = "0.1.3"
4
4
  end
5
5
  end
@@ -9,8 +9,9 @@ describe Aliyun::Oss::API do
9
9
  bucket_name = "aliyunoss-gem-test-#{rand.to_s.delete('0.')}"
10
10
  location = 'oss-cn-beijing'
11
11
  response = Aliyun::Oss::API.put_bucket(bucket_name, location)
12
- expect(response).to be_a(Net::HTTPOK)
13
12
 
13
+ expect(response).to be_a(Net::HTTPOK)
14
+
14
15
  @api = Aliyun::Oss::API
15
16
  @bucket = Aliyun::Oss::Bucket.new(name: bucket_name, location: location)
16
17
  end
@@ -31,7 +31,7 @@ describe Aliyun::Oss::Bucket do
31
31
  files.each do |f|
32
32
  data = IO.read(f)
33
33
  @bucket.upload(data, "/" + f[/test-\d\.png/], 'Content-Type'=>'image/png')
34
- end
34
+ end
35
35
  end
36
36
 
37
37
  it 'should generate share url' do
@@ -24,7 +24,7 @@ describe Aliyun::Oss::OssRequest do
24
24
  path = '/ObjectName'
25
25
  queries = {"acl"=>nil, "uploadId"=>"UploadId",
26
26
  "response-content-type"=>"ContentType" }
27
- result = Aliyun::Oss::OssRequest.new(bucket, path, queries).
27
+ result = Aliyun::Oss::OssRequest.new(bucket, path, nil, queries).
28
28
  send(:canonicalized_resource)
29
29
  expect(result).to eq("/BucketName/ObjectName?acl&response-content-type=ContentType&uploadId=UploadId")
30
30
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aliyunoss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - yijiecc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-04 00:00:00.000000000 Z
11
+ date: 2016-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,7 @@ files:
66
80
  - Rakefile
67
81
  - aliyunoss.gemspec
68
82
  - lib/aliyunoss.rb
83
+ - lib/aliyunoss/#oss_request.rb#
69
84
  - lib/aliyunoss/api.rb
70
85
  - lib/aliyunoss/bucket.rb
71
86
  - lib/aliyunoss/config.rb
@@ -105,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
120
  version: '0'
106
121
  requirements: []
107
122
  rubyforge_project:
108
- rubygems_version: 2.2.2
123
+ rubygems_version: 2.4.8
109
124
  signing_key:
110
125
  specification_version: 4
111
126
  summary: A gem for accessing Aliyun Open Storage Service.