qiniu_jxb_fix 6.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/.gitignore +18 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +12 -0
  4. data/CHANGELOG.md +146 -0
  5. data/Gemfile +8 -0
  6. data/Gemfile.lock +44 -0
  7. data/LICENSE +22 -0
  8. data/README.md +47 -0
  9. data/Rakefile +21 -0
  10. data/docs/README.md +790 -0
  11. data/lib/qiniu/abstract.rb +22 -0
  12. data/lib/qiniu/adt.rb +46 -0
  13. data/lib/qiniu/auth.rb +255 -0
  14. data/lib/qiniu/config.rb +60 -0
  15. data/lib/qiniu/exceptions.rb +120 -0
  16. data/lib/qiniu/fop.rb +4 -0
  17. data/lib/qiniu/http.rb +137 -0
  18. data/lib/qiniu/image.rb +38 -0
  19. data/lib/qiniu/log.rb +15 -0
  20. data/lib/qiniu/management.rb +166 -0
  21. data/lib/qiniu/misc.rb +35 -0
  22. data/lib/qiniu/pfop.rb +124 -0
  23. data/lib/qiniu/resumable_upload.rb +319 -0
  24. data/lib/qiniu/storage.rb +5 -0
  25. data/lib/qiniu/tokens/access_token.rb +23 -0
  26. data/lib/qiniu/tokens/download_token.rb +36 -0
  27. data/lib/qiniu/tokens/qbox_token.rb +38 -0
  28. data/lib/qiniu/tokens/upload_token.rb +57 -0
  29. data/lib/qiniu/upload.rb +134 -0
  30. data/lib/qiniu/utils.rb +109 -0
  31. data/lib/qiniu/version.rb +17 -0
  32. data/lib/qiniu-rs.rb +2 -0
  33. data/lib/qiniu.rb +209 -0
  34. data/qiniu.gemspec +29 -0
  35. data/rails3/Gemfile +4 -0
  36. data/rails3/qiniu.gemspec +29 -0
  37. data/spec/qiniu/abstract_spec.rb +30 -0
  38. data/spec/qiniu/auth_spec.rb +74 -0
  39. data/spec/qiniu/image_logo_for_test.png +0 -0
  40. data/spec/qiniu/image_spec.rb +80 -0
  41. data/spec/qiniu/management_spec.rb +163 -0
  42. data/spec/qiniu/misc_spec.rb +53 -0
  43. data/spec/qiniu/pfop_spec.rb +80 -0
  44. data/spec/qiniu/qiniu_spec.rb +321 -0
  45. data/spec/qiniu/tokens/qbox_token_spec.rb +29 -0
  46. data/spec/qiniu/upload_spec.rb +301 -0
  47. data/spec/qiniu/utils_spec.rb +49 -0
  48. data/spec/qiniu/version_spec.rb +10 -0
  49. data/spec/spec_helper.rb +19 -0
  50. metadata +222 -0
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'json'
4
+ require 'qiniu/tokens/access_token'
5
+ require 'qiniu/utils'
6
+ require 'qiniu/helper'
7
+
8
+ ### DownloadToken 类已经过时,请改用 Qiniu::Auth.authorize_download_url 方法 ###
9
+ ### 或 Qiniu::Auth.authorize_download_url_2 方法 ###
10
+
11
+ module Qiniu
12
+ class DownloadToken < AccessToken
13
+ include Helper
14
+
15
+ include Utils
16
+
17
+ attr_accessor :pattern, :expires_in
18
+
19
+ def initialize(opts = {})
20
+ @pattern = opts[:pattern]
21
+ @expires_in = opts[:expires_in] || 3600
22
+ end
23
+
24
+ def generate_signature
25
+ params = {"S" => @pattern, "E" => get_expire_time.to_i + @expires_in}
26
+ Utils.urlsafe_base64_encode(params.to_json)
27
+ end
28
+
29
+ def generate_token
30
+ signature = generate_signature
31
+ encoded_digest = generate_encoded_digest(signature)
32
+ %Q(#{@access_key}:#{encoded_digest}:#{signature})
33
+ end
34
+
35
+ end # moidule DownloadToken
36
+ end # module Qiniu
@@ -0,0 +1,38 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'cgi'
4
+ require 'json'
5
+ require 'qiniu/tokens/access_token'
6
+
7
+ module Qiniu
8
+ class QboxToken < AccessToken
9
+
10
+ include Utils
11
+
12
+ attr_accessor :url, :params
13
+
14
+ def initialize(opts = {})
15
+ @url = opts[:url]
16
+ @params = opts[:params]
17
+ end
18
+
19
+ def generate_signature
20
+ uri = URI.parse(@url)
21
+ signature = uri.path
22
+ query_string = uri.query
23
+ signature += '?' + query_string if !query_string.nil? && !query_string.empty?
24
+ signature += "\n"
25
+ if @params.is_a?(Hash)
26
+ params_string = HTTP.generate_query_string(@params)
27
+ signature += params_string
28
+ end
29
+ signature
30
+ end
31
+
32
+ def generate_token
33
+ encoded_digest = generate_encoded_digest(generate_signature)
34
+ %Q(#{@access_key}:#{encoded_digest})
35
+ end
36
+
37
+ end # module QboxToken
38
+ end # module Qiniu
@@ -0,0 +1,57 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'json'
4
+ require 'qiniu/tokens/access_token'
5
+ require 'qiniu/utils'
6
+ require 'qiniu/helper'
7
+
8
+ ### UploadToken 类已经过时,请改用 Qiniu::Auth.generate_uptoken 方法 ###
9
+
10
+ module Qiniu
11
+ class UploadToken < AccessToken
12
+
13
+ include Helper
14
+ include Utils
15
+
16
+ attr_accessor :scope, :expires_in, :callback_url, :callback_body, :callback_body_type, :customer, :escape, :async_options, :return_body, :return_url
17
+
18
+ def initialize(opts = {})
19
+ @scope = opts[:scope]
20
+ @expires_in = opts[:expires_in] || 3600
21
+ @callback_url = opts[:callback_url]
22
+ @callback_body = opts[:callback_body]
23
+ @callback_body_type = opts[:callback_body_type]
24
+ @customer = opts[:customer]
25
+ @escape = opts[:escape]
26
+ @persistent_ops = opts[:persistent_ops]
27
+ @persistent_notify_url = opts[:persistent_notify_url]
28
+ @persistent_pipeline = opts[:persistent_pipeline]
29
+ @return_body = opts[:return_body]
30
+ @return_url = opts[:return_url]
31
+ end
32
+
33
+ def generate_signature
34
+ params = {:scope => @scope, :deadline => get_expire_time.to_i + @expires_in}
35
+ params[:callbackUrl] = @callback_url if !@callback_url.nil? && !@callback_url.empty?
36
+ params[:callbackBody] = @callback_body if !@callback_body.nil? && !@callback_body.empty?
37
+ params[:callbackBodyType] = @callback_body_type if !@callback_body_type.nil? && !@callback_body_type.empty?
38
+ params[:customer] = @customer if !@customer.nil? && !@customer.empty?
39
+ params[:escape] = 1 if @escape == 1 || @escape == true
40
+ params[:returnBody] = @return_body if !@return_body.nil? && !@return_body.empty?
41
+ params[:returnUrl] = @return_url if !@return_url.nil? && !@return_url.empty?
42
+
43
+ params[:persistentOps] = @persistent_ops if !@persistent_ops.nil? && !@persistent_ops.empty?
44
+ params[:persistentNotifyUrl] = @persistent_notify_url if !@persistent_notify_url.nil? && !@persistent_notify_url.empty?
45
+ params[:persistentPipeline] = @persistent_pipeline if !@persistent_pipeline.nil? && !@persistent_pipeline.empty?
46
+
47
+ Utils.urlsafe_base64_encode(params.to_json)
48
+ end
49
+
50
+ def generate_token
51
+ signature = generate_signature
52
+ encoded_digest = generate_encoded_digest(signature)
53
+ %Q(#{@access_key}:#{encoded_digest}:#{signature})
54
+ end
55
+
56
+ end # module UploadToken
57
+ end # module Qiniu
@@ -0,0 +1,134 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # vim: sw=2 ts=2
3
+
4
+ module Qiniu
5
+ module Storage
6
+ class << self
7
+ include Utils
8
+
9
+ def upload_with_token(uptoken,
10
+ local_file,
11
+ bucket,
12
+ key = nil,
13
+ mime_type = nil,
14
+ custom_meta = nil,
15
+ callback_params = nil,
16
+ enable_crc32_check = false,
17
+ rotate = nil)
18
+ action_params = _generate_action_params(
19
+ local_file,
20
+ bucket,
21
+ key,
22
+ mime_type,
23
+ custom_meta,
24
+ enable_crc32_check,
25
+ rotate
26
+ )
27
+
28
+ if callback_params.nil?
29
+ callback_params = {:bucket => bucket, :key => key, :mime_type => mime_type}
30
+ end
31
+ callback_query_string = HTTP.generate_query_string(callback_params)
32
+
33
+ url = Config.settings[:up_host] + '/upload'
34
+ post_data = {
35
+ :params => callback_query_string,
36
+ :action => action_params,
37
+ :file => File.new(local_file, 'rb'),
38
+ :multipart => true
39
+ }
40
+ if !uptoken.nil? then
41
+ post_data[:auth] = uptoken unless uptoken.nil?
42
+ end
43
+
44
+ return HTTP.api_post(url, post_data)
45
+ end # upload_with_token
46
+
47
+ def upload_with_token_2(uptoken,
48
+ local_file,
49
+ key = nil,
50
+ x_vars = nil,
51
+ opts = {})
52
+ ### 构造URL
53
+ url = Config.settings[:up_host]
54
+ url[/\/*$/] = ''
55
+ url += '/'
56
+
57
+ ### 构造HTTP Body
58
+ file = File.new(local_file, 'rb')
59
+ if not opts[:content_type].nil?
60
+ file.define_singleton_method("content_type") do
61
+ opts[:content_type]
62
+ end
63
+ end
64
+
65
+ post_data = {
66
+ :file => file,
67
+ :multipart => true,
68
+ }
69
+ if not uptoken.nil?
70
+ post_data[:token] = uptoken
71
+ end
72
+ if not key.nil?
73
+ post_data[:key] = key
74
+ end
75
+ if x_vars.is_a?(Hash)
76
+ post_data.merge!(x_vars)
77
+ end
78
+
79
+ ### 发送请求
80
+ HTTP.api_post(url, post_data)
81
+ end # upload_with_token_2
82
+
83
+ ### 授权举例
84
+ # put_policy.bucket | put_policy.key | key | 语义 | 授权
85
+ # :---------------- | :------------- | :------ | :--- | :---
86
+ # trivial_bucket | <nil> | <nil> | 新增 | 允许,最终key为1)使用put_policy.save_key生成的值或2)资源内容的Hash值
87
+ # trivial_bucket | <nil> | foo.txt | 新增 | 允许
88
+ # trivial_bucket | <nil> | bar.jpg | 新增 | 允许
89
+ # trivial_bucket | foo.txt | <nil> | 覆盖 | 允许,由SDK将put_policy.key赋值给key实现
90
+ # trivial_bucket | foo.txt | foo.txt | 覆盖 | 允许
91
+ # trivial_bucket | foo.txt | bar.jpg | 覆盖 | 禁止,put_policy.key与key不一致
92
+ def upload_with_put_policy(put_policy,
93
+ local_file,
94
+ key = nil,
95
+ x_vars = nil,
96
+ opts = {})
97
+ uptoken = Auth.generate_uptoken(put_policy)
98
+ if key.nil? then
99
+ key = put_policy.key
100
+ end
101
+
102
+ return upload_with_token_2(uptoken, local_file, key, x_vars, opts)
103
+ end # upload_with_put_policy
104
+
105
+ private
106
+ def _generate_action_params(local_file,
107
+ bucket,
108
+ key = nil,
109
+ mime_type = nil,
110
+ custom_meta = nil,
111
+ enable_crc32_check = false,
112
+ rotate = nil)
113
+ raise NoSuchFileError, local_file unless File.exist?(local_file)
114
+
115
+ if key.nil?
116
+ key = Digest::SHA1.hexdigest(local_file + Time.now.to_s)
117
+ end
118
+
119
+ entry_uri = bucket + ':' + key
120
+ if mime_type.nil? || mime_type.empty?
121
+ mime = MIME::Types.type_for local_file
122
+ mime_type = mime.empty? ? 'application/octet-stream' : mime[0].content_type
123
+ end
124
+
125
+ action_params = '/rs-put/' + Utils.urlsafe_base64_encode(entry_uri) + '/mimeType/' + Utils.urlsafe_base64_encode(mime_type)
126
+ action_params += '/meta/' + Utils.urlsafe_base64_encode(custom_meta) unless custom_meta.nil?
127
+ action_params += '/crc32/' + Utils.crc32checksum(local_file).to_s if enable_crc32_check
128
+ action_params += '/rotate/' + rotate if !rotate.nil? && rotate.to_i >= 0
129
+ action_params
130
+ end # _generate_action_params
131
+
132
+ end # class << self
133
+ end # module Storage
134
+ end # module Qiniu
@@ -0,0 +1,109 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'uri'
4
+ require 'cgi'
5
+ require 'json'
6
+ require 'zlib'
7
+ require 'base64'
8
+ require 'rest_client'
9
+ require 'hmac-sha1'
10
+ require 'qiniu/exceptions'
11
+
12
+ module Qiniu
13
+ module Utils extend self
14
+
15
+ def urlsafe_base64_encode content
16
+ Base64.encode64(content).strip.gsub('+', '-').gsub('/','_').gsub(/\r?\n/, '')
17
+ end
18
+
19
+ def urlsafe_base64_decode encoded_content
20
+ Base64.decode64 encoded_content.gsub('_','/').gsub('-', '+')
21
+ end
22
+
23
+ def encode_entry_uri(bucket, key)
24
+ entry_uri = bucket + ':' + key
25
+ urlsafe_base64_encode(entry_uri)
26
+ end
27
+
28
+ def safe_json_parse(data)
29
+ JSON.parse(data)
30
+ rescue JSON::ParserError
31
+ {}
32
+ end
33
+
34
+ def debug(msg)
35
+ if Config.settings[:enable_debug]
36
+ Log.logger.debug(msg)
37
+ end
38
+ end
39
+
40
+ ### 已过时,仅作为兼容接口保留
41
+ def send_request_with url, data = nil, options = {}
42
+ options[:method] = Config.settings[:method] unless options[:method]
43
+ options[:content_type] = Config.settings[:content_type] unless options[:content_type]
44
+ header_options = {
45
+ :accept => :json,
46
+ :user_agent => Config.settings[:user_agent]
47
+ }
48
+ auth_token = nil
49
+ if !options[:qbox_signature_token].nil? && !options[:qbox_signature_token].empty?
50
+ auth_token = 'QBox ' + options[:qbox_signature_token]
51
+ elsif !options[:upload_signature_token].nil? && !options[:upload_signature_token].empty?
52
+ auth_token = 'UpToken ' + options[:upload_signature_token]
53
+ elsif options[:access_token]
54
+ auth_token = 'Bearer ' + options[:access_token]
55
+ end
56
+ header_options.merge!('Authorization' => auth_token) unless auth_token.nil?
57
+ case options[:method]
58
+ when :get
59
+ response = RestClient.get(url, header_options)
60
+ when :post
61
+ header_options.merge!(:content_type => options[:content_type])
62
+ response = RestClient.post(url, data, header_options)
63
+ end
64
+ code = response.respond_to?(:code) ? response.code.to_i : 0
65
+ unless HTTP.is_response_ok?(code)
66
+ raise RequestFailed.new("Request Failed", response)
67
+ else
68
+ data = {}
69
+ body = response.respond_to?(:body) ? response.body : {}
70
+ raw_headers = response.respond_to?(:raw_headers) ? response.raw_headers : {}
71
+ data = safe_json_parse(body) unless body.empty?
72
+ end
73
+ [code, data, raw_headers]
74
+ end # send_request_with
75
+
76
+ ### 已过时,仅作为兼容接口保留
77
+ def http_request url, data = nil, options = {}
78
+ retry_times = 0
79
+ begin
80
+ retry_times += 1
81
+ send_request_with url, data, options
82
+ rescue Errno::ECONNRESET => err
83
+ if Config.settings[:auto_reconnect] && retry_times < Config.settings[:max_retry_times]
84
+ retry
85
+ else
86
+ Log.logger.error err
87
+ end
88
+ rescue => e
89
+ Log.logger.warn "#{e.message} => Utils.http_request('#{url}')"
90
+ code = 0
91
+ data = {}
92
+ body = {}
93
+ if e.respond_to? :response
94
+ res = e.response
95
+ code = res.code.to_i if res.respond_to? :code
96
+ body = res.respond_to?(:body) ? res.body : ""
97
+ raw_headers = res.respond_to?(:raw_headers) ? res.raw_headers : {}
98
+ data = safe_json_parse(body) unless body.empty?
99
+ end
100
+ [code, data, raw_headers]
101
+ end
102
+ end
103
+
104
+ def crc32checksum(filepath)
105
+ File.open(filepath, "rb") { |f| Zlib.crc32 f.read }
106
+ end
107
+
108
+ end # module Utils
109
+ end # module Qiniu
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Qiniu
4
+ module Version
5
+ MAJOR = 6
6
+ MINOR = 4
7
+ PATCH = 2
8
+ # Returns a version string by joining <tt>MAJOR</tt>, <tt>MINOR</tt>, and <tt>PATCH</tt> with <tt>'.'</tt>
9
+ #
10
+ # Example
11
+ #
12
+ # Version.to_s # '1.0.2'
13
+ def self.to_s
14
+ [MAJOR, MINOR, PATCH].join('.')
15
+ end
16
+ end # Version
17
+ end # module Qiniu
data/lib/qiniu-rs.rb ADDED
@@ -0,0 +1,2 @@
1
+ # More logical way to require 'qiniu-rs'
2
+ require File.join(File.dirname(__FILE__), 'qiniu', 'qiniu')
data/lib/qiniu.rb ADDED
@@ -0,0 +1,209 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Qiniu
4
+ autoload :Version, 'qiniu/version'
5
+ autoload :Utils, 'qiniu/utils'
6
+ autoload :Auth, 'qiniu/auth'
7
+ autoload :Config, 'qiniu/config'
8
+ autoload :Log, 'qiniu/log'
9
+ autoload :Exception, 'qiniu/exceptions'
10
+ autoload :AccessToken, 'qiniu/tokens/access_token'
11
+ autoload :QboxToken, 'qiniu/tokens/qbox_token'
12
+ autoload :UploadToken, 'qiniu/tokens/upload_token'
13
+ autoload :DownloadToken, 'qiniu/tokens/download_token'
14
+ autoload :Abstract, 'qiniu/abstract'
15
+ autoload :Storage, 'qiniu/storage'
16
+ autoload :Fop, 'qiniu/fop'
17
+ autoload :Misc, 'qiniu/misc'
18
+
19
+ class << self
20
+
21
+ StatusOK = 200
22
+
23
+ def establish_connection!(opts = {})
24
+ Config.initialize_connect opts
25
+ end
26
+
27
+ def mkbucket(bucket_name)
28
+ code, data = Storage.mkbucket(bucket_name)
29
+ code == StatusOK
30
+ end
31
+
32
+ def buckets
33
+ code, data = Storage.buckets
34
+ code == StatusOK ? data : false
35
+ end
36
+
37
+ def set_protected(bucket, protected_mode)
38
+ code, data = Misc.set_protected(bucket, protected_mode)
39
+ code == StatusOK
40
+ end
41
+
42
+ def set_separator(bucket, separator)
43
+ code, data = Misc.set_separator(bucket, separator)
44
+ code == StatusOK
45
+ end
46
+
47
+ def set_style(bucket, name, style)
48
+ code, data = Misc.set_style(bucket, name, style)
49
+ code == StatusOK
50
+ end
51
+
52
+ def unset_style(bucket, name)
53
+ code, data = Misc.unset_style(bucket, name)
54
+ code == StatusOK
55
+ end
56
+
57
+ def upload_file opts = {}
58
+ uncontained_opts = [:uptoken, :file, :bucket, :key] - opts.keys
59
+ raise MissingArgsError, uncontained_opts unless uncontained_opts.empty?
60
+
61
+ source_file = opts[:file]
62
+ raise NoSuchFileError, source_file unless File.exist?(source_file)
63
+
64
+ opts[:enable_resumable_upload] = true unless opts.has_key?(:enable_resumable_upload)
65
+
66
+ if opts[:enable_resumable_upload] && File::size(source_file) > Config.settings[:block_size]
67
+ code, data, raw_headers = Storage.upload_with_token(opts[:uptoken],
68
+ opts[:file],
69
+ opts[:bucket],
70
+ opts[:key],
71
+ opts[:mime_type],
72
+ opts[:note],
73
+ opts[:customer],
74
+ opts[:callback_params],
75
+ opts[:rotate])
76
+ else
77
+ code, data, raw_headers = Storage.upload_with_token(opts[:uptoken],
78
+ opts[:file],
79
+ opts[:bucket],
80
+ opts[:key],
81
+ opts[:mime_type],
82
+ opts[:note],
83
+ opts[:callback_params],
84
+ opts[:enable_crc32_check],
85
+ opts[:rotate])
86
+ end
87
+ raise UploadFailedError.new(code, data) if code != StatusOK
88
+ return data
89
+ end
90
+
91
+ def stat(bucket, key)
92
+ code, data = Storage.stat(bucket, key)
93
+ code == StatusOK ? data : false
94
+ end
95
+
96
+ def get(bucket, key, save_as = nil, expires_in = nil, version = nil)
97
+ code, data = Storage.get(bucket, key, save_as, expires_in, version)
98
+ code == StatusOK ? data : false
99
+ end
100
+
101
+ def download(bucket, key, save_as = nil, expires_in = nil, version = nil)
102
+ code, data = Storage.get(bucket, key, save_as, expires_in, version)
103
+ code == StatusOK ? data["url"] : false
104
+ end
105
+
106
+ def copy(source_bucket, source_key, target_bucket, target_key)
107
+ code, data = Storage.copy(source_bucket, source_key, target_bucket, target_key)
108
+ code == StatusOK
109
+ end
110
+
111
+ def move(source_bucket, source_key, target_bucket, target_key)
112
+ code, data = Storage.move(source_bucket, source_key, target_bucket, target_key)
113
+ code == StatusOK
114
+ end
115
+
116
+ def delete(bucket, key)
117
+ code, data = Storage.delete(bucket, key)
118
+ code == StatusOK
119
+ end
120
+
121
+ def batch(command, bucket, keys)
122
+ code, data = Storage.batch(command, bucket, keys)
123
+ code == StatusOK ? data : false
124
+ end
125
+
126
+ def batch_stat(bucket, keys)
127
+ code, data = Storage.batch_stat(bucket, keys)
128
+ code == StatusOK ? data : false
129
+ end
130
+
131
+ def batch_get(bucket, keys)
132
+ code, data = Storage.batch_get(bucket, keys)
133
+ code == StatusOK ? data : false
134
+ end
135
+
136
+ def batch_copy(*args)
137
+ code, data = Storage.batch_copy(args)
138
+ code == StatusOK
139
+ end
140
+
141
+ def batch_move(*args)
142
+ code, data = Storage.batch_move(args)
143
+ code == StatusOK
144
+ end
145
+
146
+ def batch_download(bucket, keys)
147
+ code, data = Storage.batch_get(bucket, keys)
148
+ return false unless code == StatusOK
149
+ links = []
150
+ data.each { |e| links << e["data"]["url"] }
151
+ links
152
+ end
153
+
154
+ def batch_delete(bucket, keys)
155
+ code, data = Storage.batch_delete(bucket, keys)
156
+ code == StatusOK ? data : false
157
+ end
158
+
159
+ def drop(bucket)
160
+ code, data = Storage.drop(bucket)
161
+ code == StatusOK
162
+ end
163
+
164
+ def image_info(url)
165
+ code, data = Fop::Image.info(url)
166
+ code == StatusOK ? data : false
167
+ end
168
+
169
+ def image_exif(url)
170
+ code, data = Fop::Image.exif(url)
171
+ code == StatusOK ? data : false
172
+ end
173
+
174
+ def image_mogrify_preview_url(source_image_url, options)
175
+ Fop::Image.mogrify_preview_url(source_image_url, options)
176
+ end
177
+
178
+ def image_mogrify_save_as(bucket, key, source_image_url, options)
179
+ code, data = Storage.image_mogrify_save_as(bucket, key, source_image_url, options)
180
+ code == StatusOK ? data : false
181
+ end
182
+
183
+ def generate_upload_token(opts = {})
184
+ token_obj = UploadToken.new(opts)
185
+ token_obj.access_key = Config.settings[:access_key]
186
+ token_obj.secret_key = Config.settings[:secret_key]
187
+ #token_obj.scope = opts[:scope]
188
+ #token_obj.expires_in = opts[:expires_in]
189
+ #token_obj.callback_url = opts[:callback_url]
190
+ #token_obj.callback_body_type = opts[:callback_body_type]
191
+ #token_obj.customer = opts[:customer]
192
+ #token_obj.escape = opts[:escape]
193
+ #token_obj.async_options = opts[:async_options]
194
+ #token_obj.return_body = opts[:return_body]
195
+ token_obj.generate_token
196
+ end
197
+
198
+ def generate_download_token(opts = {})
199
+ token_obj = DownloadToken.new(opts)
200
+ token_obj.access_key = Config.settings[:access_key]
201
+ token_obj.secret_key = Config.settings[:secret_key]
202
+ #token_obj.expires_in = opts[:expires_in]
203
+ #token_obj.pattern = opts[:pattern]
204
+ token_obj.generate_token
205
+ end
206
+
207
+ end
208
+
209
+ end # module Qiniu
data/qiniu.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require File.expand_path('../lib/qiniu/version', __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.authors = ["why404","BluntBlade"]
7
+ gem.email = ["sdk@qiniu.com"]
8
+ gem.description = %q{Qiniu Resource (Cloud) Storage SDK for Ruby. See: http://developer.qiniu.com/docs/v6/sdk/ruby-sdk.html}
9
+ gem.summary = %q{Qiniu Resource (Cloud) Storage SDK for Ruby}
10
+ gem.homepage = "https://github.com/qiniu/ruby-sdk"
11
+
12
+ gem.files = `git ls-files`.split($\)
13
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
+ gem.name = "qiniu_jxb_fix"
16
+ gem.require_paths = ["lib"]
17
+ gem.version = Qiniu::Version.to_s
18
+ gem.license = "MIT"
19
+
20
+ # specify any dependencies here; for example:
21
+ gem.add_development_dependency "rake", ">= 0.9"
22
+ gem.add_development_dependency "rspec", ">= 2.11"
23
+ gem.add_development_dependency "fakeweb", "~> 1.3"
24
+ gem.add_runtime_dependency "json", "~> 1.7"
25
+ gem.add_runtime_dependency "rest-client", "~> 1.6"
26
+ gem.add_runtime_dependency "mime-types", "~> 1.19"
27
+ gem.add_runtime_dependency "ruby-hmac", "~> 0.4"
28
+ gem.add_runtime_dependency "jruby-openssl", "~> 0.7" if RUBY_PLATFORM == "java"
29
+ end
data/rails3/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rails3/qiniu.gemspec
4
+ gemspec :name => 'qiniu'
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require File.expand_path('../../lib/qiniu/version', __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.authors = ["why404","BluntBlade"]
7
+ gem.email = ["sdk@qiniu.com"]
8
+ gem.description = %q{Qiniu Resource (Cloud) Storage SDK for Ruby. See: http://developer.qiniu.com/docs/v6/sdk/ruby-sdk.html}
9
+ gem.summary = %q{Qiniu Resource (Cloud) Storage SDK for Ruby}
10
+ gem.homepage = "https://github.com/qiniu/ruby-sdk"
11
+
12
+ gem.files = `git ls-files`.split($\)
13
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
+ gem.name = "qiniu"
16
+ gem.require_paths = ["lib"]
17
+ gem.version = Qiniu::Version.to_s
18
+ gem.license = "MIT"
19
+
20
+ # specify any dependencies here; for example:
21
+ gem.add_development_dependency "rake", ">= 0.9"
22
+ gem.add_development_dependency "rspec", ">= 2.11"
23
+ gem.add_development_dependency "fakeweb", "~> 1.3"
24
+ gem.add_runtime_dependency "json", "~> 1.8"
25
+ gem.add_runtime_dependency "rest-client", "~> 1.7.3"
26
+ gem.add_runtime_dependency "mime-types", "~> 1.19"
27
+ gem.add_runtime_dependency "ruby-hmac", "~> 0.4"
28
+ gem.add_runtime_dependency "jruby-openssl", "~> 0.7" if RUBY_PLATFORM == "java"
29
+ end