aliyunoss 0.1.2 → 0.1.3

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 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.