diff --git a/.travis.yml b/.travis.yml index c4dbe7b..c7863ad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,10 +3,10 @@ rvm: - 1.8.7 - 1.9.2 - 1.9.3 + - 2.0.0 + - 2.1.1 - jruby-18mode - jruby-19mode - - rbx-18mode - - rbx-19mode - jruby-head - ree before_script: diff --git a/CHANGELOG.md b/CHANGELOG.md index 50f0cd2..5568daa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## CHANGE LOG +### v6.0.1 + +- 重新划分命名空间,存储相关归入Qiniu::Storage,数据处理相关归入Qiniu::Fop,杂项相关归入Qiniu::Misc。 + ### v3.4.6 - `Qiniu::RS.generate_download_token()` 方法的 `:pattern` 调整为必选项。 @@ -7,13 +11,13 @@ ### v3.4.5 - `Qiniu::RS.generate_upload_token()` 方法新增 `:callback_body` 和 `return_url` 选项。 -- 选项含义参考: +- 选项含义参考: ### v3.4.2 - `Qiniu::RS.generate_upload_token()` 方法新增 `:return_body` 选项。 -该选项(`:return_body`)可设置文件上传成功后,执行七牛云存储规定的回调API,并以 JSON 响应格式返回其执行结果。参考 [uploadToken 之 returnBody 说明](http://docs.qiniu.com/api/v6/put.html#uploadToken-returnBody)。 +该选项(`:return_body`)可设置文件上传成功后,执行七牛云存储规定的回调API,并以 JSON 响应格式返回其执行结果。参考 [uploadToken 之 returnBody 说明](http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html#put-policy-return-body)。 ### v3.4.1 @@ -44,9 +48,9 @@ Ruby 宿主环境如下 ### v3.3.0 -私有资源下载新版实现,添加 Qiniu::RS.generate_download_token() 方法。参考 [downloadToken](http://docs.qiniutek.com/v3/api/io/#get) +私有资源下载新版实现,添加 Qiniu::RS.generate_download_token() 方法。参考 [downloadToken](http://developer.qiniu.com/docs/v6/api/reference/security/download-token.html) -详见 [Ruby SDK 使用文档之私有资源下载](http://docs.qiniutek.com/v3/sdk/ruby/#download-private-files) +详见 [Ruby SDK 使用文档之私有资源下载](http://developer.qiniu.com/docs/v6/api/overview/dn/security.html) ### v3.2.2 diff --git a/Gemfile.lock b/Gemfile.lock index 71d99f5..dddcc76 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - qiniu-rs (3.4.6) + qiniu (6.0.1) json (~> 1.7) mime-types (~> 1.19) rest-client (~> 1.6) @@ -32,6 +32,6 @@ PLATFORMS DEPENDENCIES fakeweb (~> 1.3) - qiniu-rs! + qiniu! rake (>= 0.9) rspec (>= 2.11) diff --git a/README.md b/README.md index 16ae209..4ce900e 100755 --- a/README.md +++ b/README.md @@ -1,14 +1,19 @@ # Qiniu Resource (Cloud) Storage SDK for Ruby -# 关于 +## 关于 -此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](http://docs.qiniutek.com/v3/api/) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。 +此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, 2.0.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](http://developer.qiniu.com/docs/v6/index.html) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。 + +## 状态 + +集成测试:[![Build Status](https://api.travis-ci.org/qiniu/ruby-sdk.png?branch=master)](https://travis-ci.org/qiniu/ruby-sdk) +版本:[![Gem Version](https://badge.fury.io/rb/qiniu-rs.png)](http://badge.fury.io/rb/qiniu-rs) ## 安装 在您 Ruby 应用程序的 `Gemfile` 文件中,添加如下一行代码: - gem 'qiniu-rs' + gem 'qiniu' 然后,在应用程序所在的目录下,可以运行 `bundle` 安装依赖包: @@ -16,11 +21,11 @@ 或者,可以使用 Ruby 的包管理器 `gem` 进行安装: - $ gem install qiniu-rs + $ gem install qiniu ## 使用 -参考文档:[七牛云存储 Ruby SDK 使用指南](http://docs.qiniutek.com/v3/sdk/ruby/) +参考文档:[七牛云存储 Ruby SDK 使用指南](http://developer.qiniu.com/docs/v6/sdk/ruby-sdk.html) ## 贡献代码 @@ -32,7 +37,7 @@ ## 许可证 -Copyright (c) 2012-2013 qiniutek.com +Copyright (c) 2012-2014 qiniu.com 基于 MIT 协议发布: diff --git a/lib/qiniu-rs.rb b/lib/qiniu-rs.rb index 75057b3..1c54a93 100755 --- a/lib/qiniu-rs.rb +++ b/lib/qiniu-rs.rb @@ -1,2 +1,2 @@ # More logical way to require 'qiniu-rs' -require File.join(File.dirname(__FILE__), 'qiniu', 'rs') +require File.join(File.dirname(__FILE__), 'qiniu', 'qiniu') diff --git a/lib/qiniu/rs.rb b/lib/qiniu.rb similarity index 60% rename from lib/qiniu/rs.rb rename to lib/qiniu.rb index d248d15..49c3658 100755 --- a/lib/qiniu/rs.rb +++ b/lib/qiniu.rb @@ -1,24 +1,20 @@ # -*- encoding: utf-8 -*- module Qiniu - module RS - autoload :Version, 'qiniu/rs/version' - autoload :Config, 'qiniu/rs/config' - autoload :Log, 'qiniu/rs/log' - autoload :Exception, 'qiniu/rs/exceptions' - autoload :Utils, 'qiniu/rs/utils' - autoload :Auth, 'qiniu/rs/auth' - autoload :IO, 'qiniu/rs/io' - autoload :UP, 'qiniu/rs/up' - autoload :RS, 'qiniu/rs/rs' - autoload :EU, 'qiniu/rs/eu' - autoload :Pub, 'qiniu/rs/pub' - autoload :Image, 'qiniu/rs/image' - autoload :AccessToken, 'qiniu/tokens/access_token' - autoload :QboxToken, 'qiniu/tokens/qbox_token' - autoload :UploadToken, 'qiniu/tokens/upload_token' - autoload :DownloadToken, 'qiniu/tokens/download_token' - autoload :Abstract, 'qiniu/rs/abstract' + autoload :Version, 'qiniu/version' + autoload :Utils, 'qiniu/utils' + autoload :Auth, 'qiniu/auth' + autoload :Config, 'qiniu/config' + autoload :Log, 'qiniu/log' + autoload :Exception, 'qiniu/exceptions' + autoload :AccessToken, 'qiniu/tokens/access_token' + autoload :QboxToken, 'qiniu/tokens/qbox_token' + autoload :UploadToken, 'qiniu/tokens/upload_token' + autoload :DownloadToken, 'qiniu/tokens/download_token' + autoload :Abstract, 'qiniu/abstract' + autoload :Storage, 'qiniu/storage' + autoload :Fop, 'qiniu/fop' + autoload :Misc, 'qiniu/misc' class << self @@ -28,72 +24,38 @@ module Qiniu Config.initialize_connect opts end - def login!(user, pwd) - code, data = Auth.exchange_by_password!(user, pwd) - code == StatusOK - end - def mkbucket(bucket_name) - code, data = RS.mkbucket(bucket_name) + code, data = Storage.mkbucket(bucket_name) code == StatusOK end def buckets - code, data = RS.buckets + code, data = Storage.buckets code == StatusOK ? data : false end def set_protected(bucket, protected_mode) - code, data = Pub.set_protected(bucket, protected_mode) + code, data = Misc.set_protected(bucket, protected_mode) code == StatusOK end def set_separator(bucket, separator) - code, data = Pub.set_separator(bucket, separator) + code, data = Misc.set_separator(bucket, separator) code == StatusOK end def set_style(bucket, name, style) - code, data = Pub.set_style(bucket, name, style) + code, data = Misc.set_style(bucket, name, style) code == StatusOK end def unset_style(bucket, name) - code, data = Pub.unset_style(bucket, name) - code == StatusOK - end - -=begin - def set_watermark(customer_id, options = {}) - code, data = EU.set_watermark(customer_id, options) - code == StatusOK - end - - def get_watermark(customer_id = nil) - code, data = EU.get_watermark(customer_id) - code == StatusOK ? data : false - end -=end - - def put_auth(expires_in = nil, callback_url = nil) - code, data = IO.put_auth(expires_in, callback_url) - code == StatusOK ? data["url"] : false - end - - def upload opts = {} - code, data = IO.upload_file(opts[:url], - opts[:file], - opts[:bucket], - opts[:key], - opts[:mime_type], - opts[:note], - opts[:callback_params], - opts[:enable_crc32_check]) + code, data = Misc.unset_style(bucket, name) code == StatusOK end def put_file opts = {} - code, data = IO.put_file(opts[:file], + code, data = Storage.put_file(opts[:file], opts[:bucket], opts[:key], opts[:mime_type], @@ -112,7 +74,7 @@ module Qiniu opts[:enable_resumable_upload] = true unless opts.has_key?(:enable_resumable_upload) if opts[:enable_resumable_upload] && File::size(source_file) > Config.settings[:block_size] - code, data = UP.upload_with_token(opts[:uptoken], + code, data = Storage.upload_with_token(opts[:uptoken], opts[:file], opts[:bucket], opts[:key], @@ -122,7 +84,7 @@ module Qiniu opts[:callback_params], opts[:rotate]) else - code, data = IO.upload_with_token(opts[:uptoken], + code, data = Storage.upload_with_token(opts[:uptoken], opts[:file], opts[:bucket], opts[:key], @@ -137,62 +99,62 @@ module Qiniu end def stat(bucket, key) - code, data = RS.stat(bucket, key) + code, data = Storage.stat(bucket, key) code == StatusOK ? data : false end def get(bucket, key, save_as = nil, expires_in = nil, version = nil) - code, data = RS.get(bucket, key, save_as, expires_in, version) + code, data = Storage.get(bucket, key, save_as, expires_in, version) code == StatusOK ? data : false end def download(bucket, key, save_as = nil, expires_in = nil, version = nil) - code, data = RS.get(bucket, key, save_as, expires_in, version) + code, data = Storage.get(bucket, key, save_as, expires_in, version) code == StatusOK ? data["url"] : false end def copy(source_bucket, source_key, target_bucket, target_key) - code, data = RS.copy(source_bucket, source_key, target_bucket, target_key) + code, data = Storage.copy(source_bucket, source_key, target_bucket, target_key) code == StatusOK end def move(source_bucket, source_key, target_bucket, target_key) - code, data = RS.move(source_bucket, source_key, target_bucket, target_key) + code, data = Storage.move(source_bucket, source_key, target_bucket, target_key) code == StatusOK end def delete(bucket, key) - code, data = RS.delete(bucket, key) + code, data = Storage.delete(bucket, key) code == StatusOK end def batch(command, bucket, keys) - code, data = RS.batch(command, bucket, keys) + code, data = Storage.batch(command, bucket, keys) code == StatusOK ? data : false end def batch_stat(bucket, keys) - code, data = RS.batch_stat(bucket, keys) + code, data = Storage.batch_stat(bucket, keys) code == StatusOK ? data : false end def batch_get(bucket, keys) - code, data = RS.batch_get(bucket, keys) + code, data = Storage.batch_get(bucket, keys) code == StatusOK ? data : false end def batch_copy(*args) - code, data = RS.batch_copy(args) + code, data = Storage.batch_copy(args) code == StatusOK end def batch_move(*args) - code, data = RS.batch_move(args) + code, data = Storage.batch_move(args) code == StatusOK end def batch_download(bucket, keys) - code, data = RS.batch_get(bucket, keys) + code, data = Storage.batch_get(bucket, keys) return false unless code == StatusOK links = [] data.each { |e| links << e["data"]["url"] } @@ -200,45 +162,41 @@ module Qiniu end def batch_delete(bucket, keys) - code, data = RS.batch_delete(bucket, keys) + code, data = Storage.batch_delete(bucket, keys) code == StatusOK ? data : false end def publish(domain, bucket) - code, data = RS.publish(domain, bucket) + code, data = Storage.publish(domain, bucket) code == StatusOK end def unpublish(domain) - code, data = RS.unpublish(domain) + code, data = Storage.unpublish(domain) code == StatusOK end def drop(bucket) - code, data = RS.drop(bucket) + code, data = Storage.drop(bucket) code == StatusOK end def image_info(url) - code, data = Image.info(url) + code, data = Fop::Image.info(url) code == StatusOK ? data : false end def image_exif(url) - code, data = Image.exif(url) + code, data = Fop::Image.exif(url) code == StatusOK ? data : false end - def image_preview_url(url, spec) - Image.preivew_url(url, spec) - end - def image_mogrify_preview_url(source_image_url, options) - Image.mogrify_preview_url(source_image_url, options) + Fop::Image.mogrify_preview_url(source_image_url, options) end def image_mogrify_save_as(bucket, key, source_image_url, options) - code, data = RS.image_mogrify_save_as(bucket, key, source_image_url, options) + code, data = Storage.image_mogrify_save_as(bucket, key, source_image_url, options) code == StatusOK ? data : false end @@ -268,5 +226,4 @@ module Qiniu end - end -end +end # module Qiniu diff --git a/lib/qiniu/rs/abstract.rb b/lib/qiniu/abstract.rb similarity index 92% rename from lib/qiniu/rs/abstract.rb rename to lib/qiniu/abstract.rb index d9fc671..af32cba 100644 --- a/lib/qiniu/rs/abstract.rb +++ b/lib/qiniu/abstract.rb @@ -1,7 +1,6 @@ # -*- encoding: utf-8 -*- module Qiniu - module RS module Abstract def self.included(base) base.extend(ClassMethods) @@ -19,6 +18,5 @@ module Qiniu end end end - end - end -end + end # module Abstract +end # module Qiniu diff --git a/lib/qiniu/auth.rb b/lib/qiniu/auth.rb new file mode 100755 index 0000000..867e4a3 --- /dev/null +++ b/lib/qiniu/auth.rb @@ -0,0 +1,25 @@ +# -*- encoding: utf-8 -*- + +require 'qiniu/exceptions' + +module Qiniu + module Auth + + class << self + + include Utils + + def call_with_signature(url, data, retry_times = 0, options = {}) + code, data = http_request url, data, options.merge({:qbox_signature_token => generate_qbox_signature(url, data, options[:mime])}) + [code, data] + end + + def request(url, data = nil, options = {}) + code, data = Auth.call_with_signature(url, data, 0, options) + [code, data] + end + + end + + end # module Auth +end # module Qiniu diff --git a/lib/qiniu/rs/config.rb b/lib/qiniu/config.rb similarity index 92% rename from lib/qiniu/rs/config.rb rename to lib/qiniu/config.rb index 159447c..53216c3 100755 --- a/lib/qiniu/rs/config.rb +++ b/lib/qiniu/config.rb @@ -11,7 +11,6 @@ require 'tmpdir' module Qiniu - module RS module Config class << self @@ -20,9 +19,9 @@ module Qiniu :method => :post, :content_type => 'application/x-www-form-urlencoded', :auth_url => "https://acc.qbox.me/oauth2/token", - :rs_host => "http://rs.qbox.me", + :rs_host => "http://rs.qiniu.com", :io_host => "http://iovip.qbox.me", - :up_host => "http://up.qbox.me", + :up_host => "http://up.qiniu.com", :pub_host => "http://pu.qbox.me:10200", :eu_host => "http://eu.qbox.me", :client_id => "a75604760c4da4caaa456c0c5895c061c3065c5a", @@ -58,6 +57,5 @@ module Qiniu end end - end - end -end + end # module Config +end # module Qiniu diff --git a/lib/qiniu/rs/exceptions.rb b/lib/qiniu/exceptions.rb similarity index 99% rename from lib/qiniu/rs/exceptions.rb rename to lib/qiniu/exceptions.rb index fa123f9..352da9c 100755 --- a/lib/qiniu/rs/exceptions.rb +++ b/lib/qiniu/exceptions.rb @@ -1,7 +1,6 @@ # -*- encoding: utf-8 -*- module Qiniu - module RS class Exception < RuntimeError end @@ -118,5 +117,4 @@ module Qiniu end end - end -end +end # module Qiniu diff --git a/lib/qiniu/fop.rb b/lib/qiniu/fop.rb new file mode 100755 index 0000000..0abe87e --- /dev/null +++ b/lib/qiniu/fop.rb @@ -0,0 +1,3 @@ +# -*- encoding: utf-8 -*- + +require 'qiniu/image' diff --git a/lib/qiniu/rs/image.rb b/lib/qiniu/image.rb similarity index 80% rename from lib/qiniu/rs/image.rb rename to lib/qiniu/image.rb index 63091b5..146dcc4 100755 --- a/lib/qiniu/rs/image.rb +++ b/lib/qiniu/image.rb @@ -1,22 +1,18 @@ # -*- encoding: utf-8 -*- module Qiniu - module RS + module Fop module Image class << self include Utils def info(url) - Utils.http_request url + '/imageInfo', nil, {:method => :get} - end + Utils.http_request url + '?imageInfo', nil, {:method => :get} + end # info def exif(url) Utils.http_request url + '?exif', nil, {:method => :get} - end - - def preivew_url(url, spec) - url + '/imagePreview/' + spec.to_s - end + end # exif def mogrify_preview_url(source_image_url, options) source_image_url + '?' + generate_mogrify_params_string(options) @@ -37,6 +33,6 @@ module Qiniu end end - end - end -end + end # module Image + end # module Fop +end # module Qiniu diff --git a/lib/qiniu/rs/log.rb b/lib/qiniu/log.rb similarity index 83% rename from lib/qiniu/rs/log.rb rename to lib/qiniu/log.rb index 0a3c8a0..490fe56 100755 --- a/lib/qiniu/rs/log.rb +++ b/lib/qiniu/log.rb @@ -3,7 +3,6 @@ require 'logger' module Qiniu - module RS module Log class << self attr_accessor :logger @@ -12,6 +11,5 @@ module Qiniu @logger ||= Logger.new(STDERR) end end - end - end -end + end # module Log +end # module Qiniu diff --git a/lib/qiniu/rs/rs.rb b/lib/qiniu/management.rb similarity index 78% rename from lib/qiniu/rs/rs.rb rename to lib/qiniu/management.rb index 79bbd1e..1d6d500 100755 --- a/lib/qiniu/rs/rs.rb +++ b/lib/qiniu/management.rb @@ -1,22 +1,21 @@ # -*- encoding: utf-8 -*- module Qiniu - module RS - module RS + module Storage class << self include Utils def buckets Auth.request Config.settings[:rs_host] + '/buckets' - end + end # buckets def mkbucket(bucket_name) Auth.request Config.settings[:rs_host] + '/mkbucket/' + bucket_name - end + end # mkbucket def stat(bucket, key) Auth.request Config.settings[:rs_host] + '/stat/' + encode_entry_uri(bucket, key) - end + end # stat def get(bucket, key, save_as = nil, expires_in = nil, version = nil) url = Config.settings[:rs_host] + '/get/' + encode_entry_uri(bucket, key) @@ -24,35 +23,35 @@ module Qiniu url += '/attName/' + Utils.urlsafe_base64_encode(save_as) unless save_as.nil? url += '/expires/' + expires_in.to_s if !expires_in.nil? && expires_in > 0 Auth.request url - end + end # get def copy(source_bucket, source_key, target_bucket, target_key) uri = _generate_cp_or_mv_opstr('copy', source_bucket, source_key, target_bucket, target_key) Auth.request Config.settings[:rs_host] + uri - end + end # copy def move(source_bucket, source_key, target_bucket, target_key) uri = _generate_cp_or_mv_opstr('move', source_bucket, source_key, target_bucket, target_key) Auth.request Config.settings[:rs_host] + uri - end + end # move def delete(bucket, key) Auth.request Config.settings[:rs_host] + '/delete/' + encode_entry_uri(bucket, key) - end + end # delete def publish(domain, bucket) encoded_domain = Utils.urlsafe_base64_encode(domain) Auth.request Config.settings[:rs_host] + "/publish/#{encoded_domain}/from/#{bucket}" - end + end # publish def unpublish(domain) encoded_domain = Utils.urlsafe_base64_encode(domain) Auth.request Config.settings[:rs_host] + "/unpublish/#{encoded_domain}" - end + end # unpublish def drop(bucket) Auth.request Config.settings[:rs_host] + "/drop/#{bucket}" - end + end # drop def batch(command, bucket, keys) execs = [] @@ -60,40 +59,40 @@ module Qiniu encoded_uri = encode_entry_uri(bucket, key) execs << "op=/#{command}/#{encoded_uri}" end - Auth.request Config.settings[:rs_host] + "/batch?" + execs.join("&") - end + Auth.request Config.settings[:rs_host] + "/batch", execs.join("&"), {:mime => "application/x-www-form-urlencoded" } + end # batch def batch_get(bucket, keys) batch("get", bucket, keys) - end + end # batch_get def batch_stat(bucket, keys) batch("stat", bucket, keys) - end + end # batch_stat def batch_copy(*args) _batch_cp_or_mv('copy', args) - end + end # batch_copy def batch_move(*args) _batch_cp_or_mv('move', args) - end + end # batch_move def batch_delete(bucket, keys) batch("delete", bucket, keys) - end + end # batch_delete def save_as(bucket, key, source_url, op_params_string) encoded_uri = encode_entry_uri(bucket, key) save_as_string = '/save-as/' + encoded_uri new_url = source_url + '?' + op_params_string + save_as_string Auth.request new_url - end + end # save_as def image_mogrify_save_as(bucket, key, source_image_url, options) - mogrify_params_string = Image.generate_mogrify_params_string(options) + mogrify_params_string = Fop::Image.generate_mogrify_params_string(options) save_as(bucket, key, source_image_url, mogrify_params_string) - end + end # image_mogrify_save_as private @@ -101,17 +100,15 @@ module Qiniu source_encoded_entry_uri = encode_entry_uri(source_bucket, source_key) target_encoded_entry_uri = encode_entry_uri(target_bucket, target_key) %Q(/#{command}/#{source_encoded_entry_uri}/#{target_encoded_entry_uri}) - end + end # _generate_cp_or_mv_opstr def _batch_cp_or_mv(command, *op_args) execs = [] - op_args.each do |e| + op_args.each do |e| execs << 'op=' + _generate_cp_or_mv_opstr(command, e[0], e[1], e[2], e[3]) if e.size == 4 - end - Auth.request Config.settings[:rs_host] + "/batch?" + execs.join("&") - end - + end + Auth.request Config.settings[:rs_host] + "/batch", execs.join("&"), {:mime => "application/x-www-form-urlencoded" } + end # _batch_cp_or_mv end - end - end -end + end # module Storage +end # module Qiniu diff --git a/lib/qiniu/rs/pub.rb b/lib/qiniu/misc.rb similarity index 94% rename from lib/qiniu/rs/pub.rb rename to lib/qiniu/misc.rb index b1e4df2..d9d61b9 100755 --- a/lib/qiniu/rs/pub.rb +++ b/lib/qiniu/misc.rb @@ -1,8 +1,7 @@ # -*- encoding: utf-8 -*- module Qiniu - module RS - module Pub + module Misc class << self include Utils @@ -31,7 +30,6 @@ module Qiniu end end - end - end -end + end # module Misc +end # module Qiniu diff --git a/lib/qiniu/rs/up.rb b/lib/qiniu/resumable_upload.rb similarity index 77% rename from lib/qiniu/rs/up.rb rename to lib/qiniu/resumable_upload.rb index ec1663b..633fff6 100755 --- a/lib/qiniu/rs/up.rb +++ b/lib/qiniu/resumable_upload.rb @@ -6,92 +6,44 @@ require 'tmpdir' require 'fileutils' require 'mime/types' require 'digest/sha1' -require 'qiniu/rs/abstract' -require 'qiniu/rs/exceptions' -require 'qiniu/rs/io' +require 'qiniu/abstract' +require 'qiniu/exceptions' module Qiniu - module RS - module UP - - PROGRESS_TMP_FILE = 'progresses' - CHECKSUM_TMP_FILE = 'ctxes' + module Storage module AbstractClass class ChunkProgressNotifier - include Qiniu::RS::Abstract + include Qiniu::Abstract abstract_methods :notify # def notify(block_index, block_put_progress); end end class BlockProgressNotifier - include Qiniu::RS::Abstract + include Qiniu::Abstract abstract_methods :notify # def notify(block_index, checksum); end end - end + end # module AbstractClass class ChunkProgressNotifier < AbstractClass::ChunkProgressNotifier - attr_reader :tmpdata - def initialize(id) - @tmpdata = UP::TmpData.new(id, PROGRESS_TMP_FILE) - end def notify(index, progress) - @tmpdata.set(index, progress) logmsg = "chunk #{progress[:offset]/Config.settings[:chunk_size]} in block #{index} successfully uploaded.\n" + progress.to_s Utils.debug(logmsg) end - end + end # class ChunkProgressNotifier class BlockProgressNotifier < AbstractClass::BlockProgressNotifier - attr_reader :tmpdata - def initialize(id) - @tmpdata = UP::TmpData.new(id, CHECKSUM_TMP_FILE) - end def notify(index, checksum) - @tmpdata.set(index, checksum) Utils.debug "block #{index}: {ctx: #{checksum}} successfully uploaded." Utils.debug "block #{index}: {checksum: #{checksum}} successfully uploaded." end - end - - class TmpData - def initialize(dir, filename) - @tmpdir = Config.settings[:tmpdir] + File::SEPARATOR + dir - FileUtils.mkdir_p(@tmpdir) unless File.directory?(@tmpdir) - @tmpfile = @tmpdir + File::SEPARATOR + filename - end - - def init(values) - File.open(@tmpfile, "w") do |f| - YAML::dump(values, f) - Utils.debug %Q(Initializing tmpfile: #{@tmpfile}) - end - end - - def all - File.exist?(@tmpfile) ? YAML.load_file(@tmpfile) : [] - end - - def set(index, value) - values = all - values[index] = value - File.open(@tmpfile, "w") do |f| - YAML::dump(values, f) - Utils.debug %Q(Updating tmpfile: #{@tmpfile}) - end - end - - def sweep! - FileUtils.rm_r(@tmpdir) if File.directory?(@tmpdir) - end - end - + end # class BlockProgressNotifier class << self include Utils - def upload_with_token(uptoken, + def resumable_upload_with_token(uptoken, local_file, bucket, key = nil, @@ -114,7 +66,7 @@ module Qiniu ensure ifile.close unless ifile.nil? end - end + end # resumable_upload_with_token private @@ -137,11 +89,11 @@ module Qiniu @fh.mtime end #delegate :path, :mtime, :to => :fh - end + end # class FileData def _new_block_put_progress_data {:ctx => nil, :offset => 0, :restsize => nil, :status_code => nil, :host => nil} - end + end # _new_block_put_progress_data def _call_binary_with_token(uptoken, url, data, content_type = nil, retry_times = 0) options = { @@ -158,21 +110,29 @@ module Qiniu end end [code, data] - end + end # _call_binary_with_token def _mkblock(uptoken, block_size, body) url = Config.settings[:up_host] + "/mkblk/#{block_size}" _call_binary_with_token(uptoken, url, body) - end + end # _mkblock def _putblock(uphost, uptoken, ctx, offset, body) url = uphost + "/bput/#{ctx}/#{offset}" _call_binary_with_token(uptoken, url, body) - end + end # _putblock - def _resumable_put_block(uptoken, fh, block_index, block_size, chunk_size, progress, retry_times, notifier) + def _resumable_put_block(uptoken, + fh, + block_index, + block_size, + chunk_size, + progress, + retry_times, + notifier) code, data = 0, {} fpath = fh.path + # this block has never been uploaded. if progress[:ctx] == nil || progress[:ctx].empty? progress[:offset] = 0 @@ -205,6 +165,7 @@ module Qiniu elsif progress[:offset] + progress[:restsize] != block_size raise BlockSizeNotMathchError.new(fpath, block_index, progress[:offset], progress[:restsize], block_size) end + # loop uploading other chunks except the first one while progress[:restsize].to_i > 0 && progress[:restsize] < block_size # choose the smaller one @@ -235,13 +196,18 @@ module Qiniu end # return return [code, data] - end + end # _resumable_put_block def _block_count(fsize) ((fsize + Config.settings[:block_size] - 1) / Config.settings[:block_size]).to_i - end + end # _block_count - def _resumable_put(uptoken, fh, checksums, progresses, block_notifier = nil, chunk_notifier = nil) + def _resumable_put(uptoken, + fh, + checksums, + progresses, + block_notifier = nil, + chunk_notifier = nil) code, data = 0, {} fsize = fh.data_size block_count = _block_count(fsize) @@ -259,7 +225,9 @@ module Qiniu if progresses[block_index].nil? progresses[block_index] = _new_block_put_progress_data end - code, data = _resumable_put_block(uptoken, fh, block_index, block_size, Config.settings[:chunk_size], progresses[block_index], Config.settings[:max_retry_times], chunk_notifier) + #code, data = _resumable_put_block(uptoken, fh, block_index, block_size, Config.settings[:chunk_size], progresses[block_index], Config.settings[:max_retry_times], chunk_notifier) + # Put the whole block as a chunk + code, data = _resumable_put_block(uptoken, fh, block_index, block_size, block_size, progresses[block_index], Config.settings[:max_retry_times], chunk_notifier) if Utils.is_response_ok?(code) #checksums[block_index] = data["checksum"] checksums[block_index] = data["ctx"] @@ -270,9 +238,18 @@ module Qiniu end end return [code, data] - end + end # _resumable_put - def _mkfile(uphost, uptoken, entry_uri, fsize, checksums, mime_type = nil, custom_meta = nil, customer = nil, callback_params = nil, rotate = nil) + def _mkfile(uphost, + uptoken, + entry_uri, + fsize, + checksums, + mime_type = nil, + custom_meta = nil, + customer = nil, + callback_params = nil, + rotate = nil) path = '/rs-mkfile/' + Utils.urlsafe_base64_encode(entry_uri) + "/fsize/#{fsize}" path += '/mimeType/' + Utils.urlsafe_base64_encode(mime_type) if !mime_type.nil? && !mime_type.empty? path += '/meta/' + Utils.urlsafe_base64_encode(custom_meta) if !custom_meta.nil? && !custom_meta.empty? @@ -287,38 +264,43 @@ module Qiniu #end body = checksums.join(',') _call_binary_with_token(uptoken, url, body, 'text/plain') - end + end # _mkfile + + def _resumable_upload(uptoken, + fh, + fsize, + bucket, + key, + mime_type = nil, + custom_meta = nil, + customer = nil, + callback_params = nil, + rotate = nil) - def _resumable_upload(uptoken, fh, fsize, bucket, key, mime_type = nil, custom_meta = nil, customer = nil, callback_params = nil, rotate = nil) block_count = _block_count(fsize) - chunk_notifier = ChunkProgressNotifier.new(key) - block_notifier = BlockProgressNotifier.new(key) - progresses = chunk_notifier.tmpdata.all - if progresses.empty? - block_count.times{progresses << _new_block_put_progress_data} - chunk_notifier.tmpdata.init(progresses) - end - checksums = block_notifier.tmpdata.all - if checksums.empty? - block_count.times{checksums << ''} - block_notifier.tmpdata.init(checksums) - end + + chunk_notifier = ChunkProgressNotifier.new() + block_notifier = BlockProgressNotifier.new() + + progresses = [] + block_count.times{progresses << _new_block_put_progress_data} + checksums = [] + block_count.times{checksums << ''} + code, data = _resumable_put(uptoken, fh, checksums, progresses, block_notifier, chunk_notifier) + if Utils.is_response_ok?(code) uphost = data["host"] entry_uri = bucket + ':' + key code, data = _mkfile(uphost, uptoken, entry_uri, fsize, checksums, mime_type, custom_meta, customer, callback_params, rotate) end + if Utils.is_response_ok?(code) Utils.debug "File #{fh.path} {size: #{fsize}} successfully uploaded." - chunk_notifier.tmpdata.sweep! - block_notifier.tmpdata.sweep! end + [code, data] - end - - end - - end - end -end + end # _resumable_upload + end # self class + end # module Storage +end # module Qiniu diff --git a/lib/qiniu/rs/auth.rb b/lib/qiniu/rs/auth.rb deleted file mode 100755 index bd93a79..0000000 --- a/lib/qiniu/rs/auth.rb +++ /dev/null @@ -1,89 +0,0 @@ -# -*- encoding: utf-8 -*- - -require 'qiniu/rs/exceptions' - -module Qiniu - module RS - module Auth - class << self - include Utils - - def exchange_by_password!(username, password) - @username = username - @password = password - post_data = { - :client_id => Config.settings[:client_id], - :grant_type => "password", - :username => username, - :password => password - } - code, data = http_request Config.settings[:auth_url], post_data - reset_token(data["access_token"], data["refresh_token"]) if Utils.is_response_ok?(code) - [code, data] - end - - def exchange_by_refresh_token!(refresh_token) - post_data = { - :client_id => Config.settings[:client_id], - :grant_type => "refresh_token", - :refresh_token => refresh_token - } - code, data = http_request Config.settings[:auth_url], post_data - reset_token(data["access_token"], data["refresh_token"]) if Utils.is_response_ok?(code) - [code, data] - end - - def reset_token(access_token, refresh_token) - @access_token = access_token - @refresh_token = refresh_token - end - - def call_with_logged_in(url, data, retry_times = 0) - raise MissingAccessToken if @access_token.nil? - code, data = http_request url, data, {:access_token => @access_token} - if code == 401 - raise MissingRefreshToken if @refresh_token.nil? - code, data = exchange_by_refresh_token!(@refresh_token) - if code == 401 - raise MissingUsernameOrPassword if (@username.nil? || @password.nil?) - code, data = exchange_by_password!(@username, @password) - end - if Utils.is_response_ok?(code) - retry_times += 1 - if Config.settings[:auto_reconnect] && retry_times < Config.settings[:max_retry_times] - return call_with_logged_in(url, data, retry_times) - end - end - end - [code, data] - end - - def call_with_signature(url, data, retry_times = 0, options = {}) - code, data = http_request url, data, options.merge({:qbox_signature_token => generate_qbox_signature(url, data)}) - [code, data] - end - - def request(url, data = nil, options = {}) - begin - if Config.settings[:access_key].empty? || Config.settings[:secret_key].empty? - code, data = Auth.call_with_logged_in(url, data) - else - code, data = Auth.call_with_signature(url, data, 0, options) - end - rescue MissingAccessToken => e - Log.logger.error e - code, data = 401, {} - rescue MissingRefreshToken => e - Log.logger.error e - code, data = 401, {} - rescue MissingUsernameOrPassword => e - Log.logger.error e - code, data = 401, {} - end - [code, data] - end - - end - end - end -end diff --git a/lib/qiniu/rs/eu.rb b/lib/qiniu/rs/eu.rb deleted file mode 100755 index f684417..0000000 --- a/lib/qiniu/rs/eu.rb +++ /dev/null @@ -1,22 +0,0 @@ -# -*- encoding: utf-8 -*- - -module Qiniu - module RS - module EU - class << self - include Utils - - def set_watermark(customer_id, options = {}) - Auth.request Config.settings[:eu_host] + '/wmset', options.merge({:customer => customer_id}) - end - - def get_watermark(customer_id = nil) - post_data = customer_id.nil? ? nil : {:customer => customer_id} - Auth.request Config.settings[:eu_host] + '/wmget', post_data - end - - end - end - end -end - diff --git a/lib/qiniu/rs/io.rb b/lib/qiniu/rs/io.rb deleted file mode 100755 index cccabe3..0000000 --- a/lib/qiniu/rs/io.rb +++ /dev/null @@ -1,64 +0,0 @@ -# -*- encoding: utf-8 -*- - -require 'mime/types' -require 'digest/sha1' -require 'qiniu/rs/exceptions' - -module Qiniu - module RS - module IO - class << self - include Utils - - def put_auth(expires_in = nil, callback_url = nil) - url = Config.settings[:io_host] + "/put-auth/" - url += "#{expires_in}" if !expires_in.nil? && expires_in > 0 - if !callback_url.nil? && !callback_url.empty? - encoded_callback_url = Utils.urlsafe_base64_encode(callback_url) - url += "/callback/#{encoded_callback_url}" - end - Auth.request(url) - end - - def upload_file(url, local_file, bucket, key = nil, mime_type = nil, custom_meta = nil, callback_params = nil, enable_crc32_check = false) - action_params = _generate_action_params(local_file, bucket, key, mime_type, custom_meta, enable_crc32_check) - callback_params = {:bucket => bucket, :key => key, :mime_type => mime_type} if callback_params.nil? - callback_query_string = Utils.generate_query_string(callback_params) - Utils.upload_multipart_data(url, local_file, action_params, callback_query_string) - end - - def put_file(local_file, bucket, key = nil, mime_type = nil, custom_meta = nil, enable_crc32_check = false) - action_params = _generate_action_params(local_file, bucket, key, mime_type, custom_meta, enable_crc32_check) - url = Config.settings[:io_host] + action_params - options = {:content_type => 'application/octet-stream'} - Auth.request url, ::IO.read(local_file), options - end - - def upload_with_token(uptoken, local_file, bucket, key = nil, mime_type = nil, custom_meta = nil, callback_params = nil, enable_crc32_check = false, rotate = nil) - action_params = _generate_action_params(local_file, bucket, key, mime_type, custom_meta, enable_crc32_check, rotate) - callback_params = {:bucket => bucket, :key => key, :mime_type => mime_type} if callback_params.nil? - callback_query_string = Utils.generate_query_string(callback_params) - url = Config.settings[:up_host] + '/upload' - Utils.upload_multipart_data(url, local_file, action_params, callback_query_string, uptoken) - end - - private - def _generate_action_params(local_file, bucket, key = nil, mime_type = nil, custom_meta = nil, enable_crc32_check = false, rotate = nil) - raise NoSuchFileError, local_file unless File.exist?(local_file) - key = Digest::SHA1.hexdigest(local_file + Time.now.to_s) if key.nil? - entry_uri = bucket + ':' + key - if mime_type.nil? || mime_type.empty? - mime = MIME::Types.type_for local_file - mime_type = mime.empty? ? 'application/octet-stream' : mime[0].content_type - end - action_params = '/rs-put/' + Utils.urlsafe_base64_encode(entry_uri) + '/mimeType/' + Utils.urlsafe_base64_encode(mime_type) - action_params += '/meta/' + Utils.urlsafe_base64_encode(custom_meta) unless custom_meta.nil? - action_params += '/crc32/' + Utils.crc32checksum(local_file).to_s if enable_crc32_check - action_params += '/rotate/' + rotate if !rotate.nil? && rotate.to_i >= 0 - action_params - end - - end - end - end -end diff --git a/lib/qiniu/storage.rb b/lib/qiniu/storage.rb new file mode 100755 index 0000000..cdae4b0 --- /dev/null +++ b/lib/qiniu/storage.rb @@ -0,0 +1,5 @@ +# -*- encoding: utf-8 -*- + +require 'qiniu/upload' +require 'qiniu/resumable_upload' +require 'qiniu/management' diff --git a/lib/qiniu/tokens/access_token.rb b/lib/qiniu/tokens/access_token.rb index 78aa99a..43534e0 100755 --- a/lib/qiniu/tokens/access_token.rb +++ b/lib/qiniu/tokens/access_token.rb @@ -1,11 +1,10 @@ # -*- encoding: utf-8 -*- require 'hmac-sha1' -require 'qiniu/rs/config' -require 'qiniu/rs/utils' +require 'qiniu/config' +require 'qiniu/utils' module Qiniu - module RS class AccessToken include Utils @@ -18,6 +17,5 @@ module Qiniu urlsafe_base64_encode(hmac.digest) end - end - end -end + end # AccessToken +end # module Qiniu diff --git a/lib/qiniu/tokens/download_token.rb b/lib/qiniu/tokens/download_token.rb index f681520..ccf75a5 100755 --- a/lib/qiniu/tokens/download_token.rb +++ b/lib/qiniu/tokens/download_token.rb @@ -2,10 +2,9 @@ require 'json' require 'qiniu/tokens/access_token' -require 'qiniu/rs/utils' +require 'qiniu/utils' module Qiniu - module RS class DownloadToken < AccessToken include Utils @@ -28,6 +27,5 @@ module Qiniu %Q(#{@access_key}:#{encoded_digest}:#{signature}) end - end - end -end + end # moidule DownloadToken +end # module Qiniu diff --git a/lib/qiniu/tokens/qbox_token.rb b/lib/qiniu/tokens/qbox_token.rb index 8ccdb0c..bca67c2 100755 --- a/lib/qiniu/tokens/qbox_token.rb +++ b/lib/qiniu/tokens/qbox_token.rb @@ -5,7 +5,6 @@ require 'json' require 'qiniu/tokens/access_token' module Qiniu - module RS class QboxToken < AccessToken include Utils @@ -35,6 +34,5 @@ module Qiniu %Q(#{@access_key}:#{encoded_digest}) end - end - end -end + end # module QboxToken +end # module Qiniu diff --git a/lib/qiniu/tokens/upload_token.rb b/lib/qiniu/tokens/upload_token.rb index d2fae00..c5202f8 100755 --- a/lib/qiniu/tokens/upload_token.rb +++ b/lib/qiniu/tokens/upload_token.rb @@ -2,10 +2,9 @@ require 'json' require 'qiniu/tokens/access_token' -require 'qiniu/rs/utils' +require 'qiniu/utils' module Qiniu - module RS class UploadToken < AccessToken include Utils @@ -44,6 +43,5 @@ module Qiniu %Q(#{@access_key}:#{encoded_digest}:#{signature}) end - end - end -end + end # module UploadToken +end # module Qiniu diff --git a/lib/qiniu/upload.rb b/lib/qiniu/upload.rb new file mode 100755 index 0000000..73f9d98 --- /dev/null +++ b/lib/qiniu/upload.rb @@ -0,0 +1,114 @@ +# -*- encoding: utf-8 -*- + +module Qiniu + module Storage + class << self + include Utils + + def put_file(local_file, + bucket, + key = nil, + mime_type = nil, + custom_meta = nil, + enable_crc32_check = false) + action_params = _generate_action_params( + local_file, + bucket, + key, + mime_type, + custom_meta, + enable_crc32_check + ) + + url = Config.settings[:io_host] + action_params + options = {:content_type => 'application/octet-stream'} + + Auth.request url, ::IO.read(local_file), options + end # put_file + + def upload_with_token(uptoken, + local_file, + bucket, + key = nil, + mime_type = nil, + custom_meta = nil, + callback_params = nil, + enable_crc32_check = false, + rotate = nil) + action_params = _generate_action_params( + local_file, + bucket, + key, + mime_type, + custom_meta, + enable_crc32_check, + rotate + ) + + if callback_params.nil? + callback_params = {:bucket => bucket, :key => key, :mime_type => mime_type} + end + callback_query_string = Utils.generate_query_string(callback_params) + url = Config.settings[:up_host] + '/upload' + + Utils.upload_multipart_data(url, local_file, action_params, callback_query_string, uptoken) + end # upload_with_token + + def upload_with_token_2(uptoken, + local_file, + key = nil, + x_vars = nil) + ### 构造URL + url = Config.settings[:up_host] + url[/\/*$/] = '' + url += '/' + + ### 构造HTTP Body + post_data = { + :file => File.new(local_file, 'rb'), + :multipart => true, + } + if not uptoken.nil? + post_data[:token] = uptoken + end + if not key.nil? + post_data[:key] = key + end + if x_vars.is_a?(Hash) + post_data.merge!(x_vars) + end + + ### 发送请求 + Utils.http_request url, post_data + end # upload_with_token_2 + + private + def _generate_action_params(local_file, + bucket, + key = nil, + mime_type = nil, + custom_meta = nil, + enable_crc32_check = false, + rotate = nil) + raise NoSuchFileError, local_file unless File.exist?(local_file) + + if key.nil? + key = Digest::SHA1.hexdigest(local_file + Time.now.to_s) + end + + entry_uri = bucket + ':' + key + if mime_type.nil? || mime_type.empty? + mime = MIME::Types.type_for local_file + mime_type = mime.empty? ? 'application/octet-stream' : mime[0].content_type + end + + action_params = '/rs-put/' + Utils.urlsafe_base64_encode(entry_uri) + '/mimeType/' + Utils.urlsafe_base64_encode(mime_type) + action_params += '/meta/' + Utils.urlsafe_base64_encode(custom_meta) unless custom_meta.nil? + action_params += '/crc32/' + Utils.crc32checksum(local_file).to_s if enable_crc32_check + action_params += '/rotate/' + rotate if !rotate.nil? && rotate.to_i >= 0 + action_params + end # _generate_action_params + + end # class << self + end # module Storage +end # module Qiniu diff --git a/lib/qiniu/rs/utils.rb b/lib/qiniu/utils.rb similarity index 94% rename from lib/qiniu/rs/utils.rb rename to lib/qiniu/utils.rb index 3c0d169..ba7a4d8 100755 --- a/lib/qiniu/rs/utils.rb +++ b/lib/qiniu/utils.rb @@ -7,10 +7,9 @@ require 'zlib' require 'base64' require 'rest_client' require 'hmac-sha1' -require 'qiniu/rs/exceptions' +require 'qiniu/exceptions' module Qiniu - module RS module Utils extend self def urlsafe_base64_encode content @@ -127,7 +126,7 @@ module Qiniu File.open(filepath, "rb") { |f| Zlib.crc32 f.read } end - def generate_qbox_signature(url, params) + def generate_qbox_signature(url, params, mime = nil) access_key = Config.settings[:access_key] secret_key = Config.settings[:secret_key] uri = URI.parse(url) @@ -139,12 +138,14 @@ module Qiniu params_string = generate_query_string(params) signature += params_string end + if mime.is_a?(String) && mime == "application/x-www-form-urlencoded" && params.is_a?(String) + signature += params + end hmac = HMAC::SHA1.new(secret_key) hmac.update(signature) encoded_digest = urlsafe_base64_encode(hmac.digest) %Q(#{access_key}:#{encoded_digest}) end - end - end -end + end # module Utils +end # module Qiniu diff --git a/lib/qiniu/rs/version.rb b/lib/qiniu/version.rb similarity index 78% rename from lib/qiniu/rs/version.rb rename to lib/qiniu/version.rb index c74a1b0..8d779d8 100755 --- a/lib/qiniu/rs/version.rb +++ b/lib/qiniu/version.rb @@ -1,11 +1,10 @@ # -*- encoding: utf-8 -*- module Qiniu - module RS module Version - MAJOR = 3 - MINOR = 4 - PATCH = 6 + MAJOR = 6 + MINOR = 0 + PATCH = 1 # Returns a version string by joining MAJOR, MINOR, and PATCH with '.' # # Example @@ -14,6 +13,5 @@ module Qiniu def self.to_s [MAJOR, MINOR, PATCH].join('.') end - end - end -end + end # Version +end # module Qiniu diff --git a/qiniu-rs.gemspec b/qiniu.gemspec similarity index 84% rename from qiniu-rs.gemspec rename to qiniu.gemspec index 21e5ffb..6e5e0a5 100755 --- a/qiniu-rs.gemspec +++ b/qiniu.gemspec @@ -1,20 +1,20 @@ # -*- encoding: utf-8 -*- -require File.expand_path('../lib/qiniu/rs/version', __FILE__) +require File.expand_path('../lib/qiniu/version', __FILE__) Gem::Specification.new do |gem| gem.authors = ["why404"] gem.email = ["why404@gmail.com"] - gem.description = %q{Qiniu Resource (Cloud) Storage SDK for Ruby. See: http://docs.qiniu.com/ruby-sdk/} + gem.description = %q{Qiniu Resource (Cloud) Storage SDK for Ruby. See: http://developer.qiniu.com/docs/v6/sdk/ruby-sdk.html} gem.summary = %q{Qiniu Resource (Cloud) Storage SDK for Ruby} gem.homepage = "https://github.com/qiniu/ruby-sdk" gem.files = `git ls-files`.split($\) gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) } gem.test_files = gem.files.grep(%r{^(test|spec|features)/}) - gem.name = "qiniu-rs" + gem.name = "qiniu" gem.require_paths = ["lib"] - gem.version = Qiniu::RS::Version.to_s + gem.version = Qiniu::Version.to_s # specify any dependencies here; for example: gem.add_development_dependency "rake", ">= 0.9" diff --git a/spec/qiniu/rs/abstract_spec.rb b/spec/qiniu/abstract_spec.rb similarity index 82% rename from spec/qiniu/rs/abstract_spec.rb rename to spec/qiniu/abstract_spec.rb index e69af62..372cf33 100755 --- a/spec/qiniu/rs/abstract_spec.rb +++ b/spec/qiniu/abstract_spec.rb @@ -1,12 +1,12 @@ # -*- encoding: utf-8 -*- require 'spec_helper' -require 'qiniu/rs/abstract' +require 'qiniu/abstract' -describe Qiniu::RS::Abstract do +describe Qiniu::Abstract do before(:each) do @klass = Class.new do - include Qiniu::RS::Abstract + include Qiniu::Abstract abstract_methods :foo, :bar end diff --git a/spec/qiniu/rs/image_logo_for_test.png b/spec/qiniu/image_logo_for_test.png similarity index 100% rename from spec/qiniu/rs/image_logo_for_test.png rename to spec/qiniu/image_logo_for_test.png diff --git a/spec/qiniu/rs/image_spec.rb b/spec/qiniu/image_spec.rb similarity index 71% rename from spec/qiniu/rs/image_spec.rb rename to spec/qiniu/image_spec.rb index 135897c..986c9c0 100755 --- a/spec/qiniu/rs/image_spec.rb +++ b/spec/qiniu/image_spec.rb @@ -1,20 +1,20 @@ # -*- encoding: utf-8 -*- require 'spec_helper' -require 'qiniu/rs/auth' -require 'qiniu/rs' -require 'qiniu/rs/image' +require 'qiniu/auth' +require 'qiniu' +require 'qiniu/fop' module Qiniu - module RS - describe Image do + module Fop + describe Fop do before :all do @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s @key = "image_logo_for_test.png" - result = Qiniu::RS.mkbucket(@bucket) + result = Qiniu.mkbucket(@bucket) puts result.inspect result.should be_true @@ -27,8 +27,8 @@ module Qiniu :async_options => "imageView/1/w/120/h/120", :return_body => '{"size":$(fsize), "hash":$(etag), "width":$(imageInfo.width), "height":$(imageInfo.height)}' } - uptoken = Qiniu::RS.generate_upload_token(upopts) - data = Qiniu::RS.upload_file :uptoken => uptoken, :file => local_file, :bucket => @bucket, :key => @key + uptoken = Qiniu.generate_upload_token(upopts) + data = Qiniu.upload_file :uptoken => uptoken, :file => local_file, :bucket => @bucket, :key => @key puts data.inspect data["size"].should_not be_zero @@ -36,7 +36,7 @@ module Qiniu data["width"].should_not be_zero data["height"].should_not be_zero - result = Qiniu::RS.get(@bucket, @key) + result = Qiniu.get(@bucket, @key) result["url"].should_not be_empty puts result.inspect @source_image_url = result["url"] @@ -53,33 +53,35 @@ module Qiniu end after :all do - result = Qiniu::RS.drop(@bucket) + result = Qiniu.drop(@bucket) puts result.inspect result.should_not be_false end context ".info" do it "should works" do - code, data = Qiniu::RS::Image.info(@source_image_url) + code, data = Qiniu::Fop::Image.info(@source_image_url) code.should == 200 puts data.inspect end end +=begin context ".exif" do it "should works" do - code, data = Qiniu::RS::Image.exif(@source_image_url) + code, data = Qiniu::Fop::Image.exif(@source_image_url) puts data.inspect end end +=end context ".mogrify_preview_url" do it "should works" do - mogrify_preview_url = Qiniu::RS::Image.mogrify_preview_url(@source_image_url, @mogrify_options) + mogrify_preview_url = Qiniu::Fop::Image.mogrify_preview_url(@source_image_url, @mogrify_options) puts mogrify_preview_url.inspect end end end - end -end + end # module Fop +end # module Qiniu diff --git a/spec/qiniu/rs/rs_spec.rb b/spec/qiniu/management_spec.rb similarity index 59% rename from spec/qiniu/rs/rs_spec.rb rename to spec/qiniu/management_spec.rb index 3e3a785..383c2c8 100755 --- a/spec/qiniu/rs/rs_spec.rb +++ b/spec/qiniu/management_spec.rb @@ -2,49 +2,41 @@ require 'digest/sha1' require 'spec_helper' -require 'qiniu/rs/auth' -require 'qiniu/rs/io' -require 'qiniu/rs/rs' +require 'qiniu/auth' +require 'qiniu/management' +require 'qiniu' module Qiniu - module RS - describe RS do + module Storage + describe Storage do before :all do @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s @key = Digest::SHA1.hexdigest((Time.now.to_i+rand(100)).to_s) @key2 = @key + rand(100).to_s - #@domain = @bucket + '.dn.qbox.me' - code, data = Qiniu::RS::RS.mkbucket(@bucket) + code, data = Storage.mkbucket(@bucket) puts [code, data].inspect code.should == 200 end after :all do - code, data = Qiniu::RS::RS.drop(@bucket) + code, data = Storage.drop(@bucket) puts [code, data].inspect code.should == 200 end - context "IO.upload_file" do + context ".put_file" do it "should works" do - code, data = Qiniu::RS::IO.put_auth() - puts data.inspect + code, data = Storage.put_file(__FILE__, @bucket, @key, 'application/x-ruby', 'customMeta', true) code.should == 200 - data["url"].should_not be_empty - data["expiresIn"].should_not be_zero - @put_url = data["url"] - - code2, data2 = Qiniu::RS::IO.upload_file(@put_url, __FILE__, @bucket, @key) - puts data2.inspect - code2.should == 200 + puts data.inspect end end context ".buckets" do it "should works" do - code, data = Qiniu::RS::RS.buckets + code, data = Storage.buckets code.should == 200 puts data.inspect end @@ -52,7 +44,7 @@ module Qiniu context ".stat" do it "should works" do - code, data = Qiniu::RS::RS.stat(@bucket, @key) + code, data = Storage.stat(@bucket, @key) code.should == 200 puts data.inspect end @@ -60,7 +52,7 @@ module Qiniu context ".get" do it "should works" do - code, data = Qiniu::RS::RS.get(@bucket, @key, "rs_spec.rb", 1) + code, data = Storage.get(@bucket, @key, "rs_spec.rb", 1) code.should == 200 puts data.inspect end @@ -68,7 +60,7 @@ module Qiniu context ".batch" do it "should works" do - code, data = Qiniu::RS::RS.batch("stat", @bucket, [@key]) + code, data = Storage.batch("stat", @bucket, [@key]) code.should == 200 puts data.inspect end @@ -76,7 +68,7 @@ module Qiniu context ".batch_stat" do it "should works" do - code, data = Qiniu::RS::RS.batch_stat(@bucket, [@key]) + code, data = Storage.batch_stat(@bucket, [@key]) code.should == 200 puts data.inspect end @@ -84,7 +76,7 @@ module Qiniu context ".batch_get" do it "should works" do - code, data = Qiniu::RS::RS.batch_get(@bucket, [@key]) + code, data = Storage.batch_get(@bucket, [@key]) code.should == 200 puts data.inspect end @@ -92,27 +84,31 @@ module Qiniu context ".batch_copy" do it "should works" do - code, data = Qiniu::RS::RS.batch_copy [@bucket, @key, @bucket, @key2] + code, data = Storage.batch_copy @bucket, @key, @bucket, @key2 code.should == 200 puts data.inspect - #code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2) + #code2, data2 = Qiniu.stat(@bucket, @key2) #code2.should == 200 #puts data2.inspect + + code, data = Storage.delete @bucket, @key2 + code.should == 200 + puts data.inspect end end context ".batch_move" do it "should works" do - code, data = Qiniu::RS::RS.batch_move [@bucket, @key, @bucket, @key2] + code, data = Storage.batch_move @bucket, @key, @bucket, @key2 code.should == 200 puts data.inspect - #code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2) + #code2, data2 = Qiniu.stat(@bucket, @key2) #code2.should == 200 #puts data2.inspect - code3, data3 = Qiniu::RS::RS.batch_move [@bucket, @key2, @bucket, @key] + code3, data3 = Storage.batch_move @bucket, @key2, @bucket, @key code3.should == 200 puts data3.inspect end @@ -121,7 +117,7 @@ module Qiniu =begin context ".publish" do it "should works" do - code, data = Qiniu::RS::RS.publish(@domain, @bucket) + code, data = Qiniu.publish(@domain, @bucket) code.should == 200 puts data.inspect end @@ -129,7 +125,7 @@ module Qiniu context ".unpublish" do it "should works" do - code, data = Qiniu::RS::RS.unpublish(@domain) + code, data = Qiniu.unpublish(@domain) code.should == 200 puts data.inspect end @@ -138,15 +134,15 @@ module Qiniu context ".move" do it "should works" do - code, data = Qiniu::RS::RS.move(@bucket, @key, @bucket, @key2) + code, data = Storage.move(@bucket, @key, @bucket, @key2) code.should == 200 puts data.inspect - code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2) + code2, data2 = Storage.stat(@bucket, @key2) code2.should == 200 puts data2.inspect - code3, data3 = Qiniu::RS::RS.move(@bucket, @key2, @bucket, @key) + code3, data3 = Storage.move(@bucket, @key2, @bucket, @key) code3.should == 200 puts data3.inspect end @@ -154,11 +150,11 @@ module Qiniu context ".copy" do it "should works" do - code, data = Qiniu::RS::RS.copy(@bucket, @key, @bucket, @key2) + code, data = Storage.copy(@bucket, @key, @bucket, @key2) code.should == 200 puts data.inspect - #code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2) + #code2, data2 = Qiniu.stat(@bucket, @key2) #code2.should == 200 #puts data2.inspect end @@ -166,7 +162,7 @@ module Qiniu context ".delete" do it "should works" do - code, data = Qiniu::RS::RS.delete(@bucket, @key) + code, data = Storage.delete(@bucket, @key) code.should == 200 puts data.inspect end @@ -174,12 +170,12 @@ module Qiniu context ".drop" do it "should works" do - code, data = Qiniu::RS::RS.drop(@bucket) + code, data = Storage.drop(@bucket) code.should == 200 puts data.inspect end end end - end -end + end # module Storage +end # module Qiniu diff --git a/spec/qiniu/rs/pub_spec.rb b/spec/qiniu/misc_spec.rb similarity index 61% rename from spec/qiniu/rs/pub_spec.rb rename to spec/qiniu/misc_spec.rb index 1addab7..f9fa2c5 100755 --- a/spec/qiniu/rs/pub_spec.rb +++ b/spec/qiniu/misc_spec.rb @@ -1,30 +1,30 @@ # -*- encoding: utf-8 -*- require 'spec_helper' -require 'qiniu/rs/auth' -require 'qiniu/rs/rs' -require 'qiniu/rs/pub' +require 'qiniu/auth' +require 'qiniu' +require 'qiniu/misc' module Qiniu - module RS - describe Pub do + module Misc + describe Misc do before :all do @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s - result = Qiniu::RS.mkbucket(@bucket) + result = Qiniu.mkbucket(@bucket) puts result.inspect result.should_not be_false end after :all do - result = Qiniu::RS.drop(@bucket) + result = Qiniu.drop(@bucket) puts result.inspect result.should_not be_false end context ".set_protected" do it "should works" do - code, data = Qiniu::RS::Pub.set_protected(@bucket, 1) + code, data = Qiniu::Misc.set_protected(@bucket, 1) code.should == 200 puts data.inspect end @@ -32,7 +32,7 @@ module Qiniu context ".set_separator" do it "should works" do - code, data = Qiniu::RS::Pub.set_separator(@bucket, "-") + code, data = Qiniu::Misc.set_separator(@bucket, "-") code.should == 200 puts data.inspect end @@ -40,7 +40,7 @@ module Qiniu context ".set_style" do it "should works" do - code, data = Qiniu::RS::Pub.set_style(@bucket, "small.jpg", "imageMogr/auto-orient/thumbnail/!120x120r/gravity/center/crop/!120x120/quality/80") + code, data = Qiniu::Misc.set_style(@bucket, "small.jpg", "imageMogr/auto-orient/thumbnail/!120x120r/gravity/center/crop/!120x120/quality/80") code.should == 200 puts data.inspect end @@ -48,12 +48,12 @@ module Qiniu context ".unset_style" do it "should works" do - code, data = Qiniu::RS::Pub.unset_style(@bucket, "small.jpg") + code, data = Qiniu::Misc.unset_style(@bucket, "small.jpg") code.should == 200 puts data.inspect end end end - end -end + end # module Misc +end # module Qiniu diff --git a/spec/qiniu/rs_spec.rb b/spec/qiniu/qiniu_spec.rb similarity index 61% rename from spec/qiniu/rs_spec.rb rename to spec/qiniu/qiniu_spec.rb index fa2cdb3..0c266b6 100755 --- a/spec/qiniu/rs_spec.rb +++ b/spec/qiniu/qiniu_spec.rb @@ -2,11 +2,11 @@ require 'digest/sha1' require 'spec_helper' -require 'qiniu/rs' -require 'qiniu/rs/exceptions' +require 'qiniu' +require 'qiniu/exceptions' module Qiniu - describe RS do + describe Qiniu do before :all do @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s @@ -14,125 +14,39 @@ module Qiniu @key2 = @key + rand(100).to_s #@domain = @bucket + '.dn.qbox.me' - result = Qiniu::RS.mkbucket(@bucket) + result = Qiniu.mkbucket(@bucket) result.should_not be_false @test_image_bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s - result2 = Qiniu::RS.mkbucket(@test_image_bucket) + result2 = Qiniu.mkbucket(@test_image_bucket) puts result2.inspect result2.should be_true @test_image_key = 'image_logo_for_test.png' - local_file = File.expand_path('./rs/' + @test_image_key, File.dirname(__FILE__)) + local_file = File.expand_path('./' + @test_image_key, File.dirname(__FILE__)) puts local_file.inspect upopts = {:scope => @test_image_bucket, :expires_in => 3600, :customer => "why404@gmail.com"} - uptoken = Qiniu::RS.generate_upload_token(upopts) - data = Qiniu::RS.upload_file :uptoken => uptoken, :file => local_file, :bucket => @test_image_bucket, :key => @test_image_key + uptoken = Qiniu.generate_upload_token(upopts) + data = Qiniu.upload_file :uptoken => uptoken, :file => local_file, :bucket => @test_image_bucket, :key => @test_image_key puts data.inspect end after :all do - #result = Qiniu::RS.unpublish(@domain) + #result = Qiniu.unpublish(@domain) #result.should_not be_false - result1 = Qiniu::RS.drop(@bucket) + result1 = Qiniu.drop(@bucket) puts result1.inspect result1.should_not be_false - result2 = Qiniu::RS.drop(@test_image_bucket) + result2 = Qiniu.drop(@test_image_bucket) puts result2.inspect result2.should_not be_false end - context ".buckets" do - it "should works" do - result = Qiniu::RS.buckets - result.should_not be_false - puts result.inspect - end - end - - context ".set_protected" do - it "should works" do - result = Qiniu::RS.set_protected(@bucket, 1) - result.should_not be_false - puts result.inspect - end - end - - context ".set_separator" do - it "should works" do - result = Qiniu::RS.set_separator(@bucket, "-") - result.should_not be_false - puts result.inspect - end - end - - context ".set_style" do - it "should works" do - result = Qiniu::RS.set_style(@bucket, "small.jpg", "imageMogr/auto-orient/thumbnail/!120x120r/gravity/center/crop/!120x120/quality/80") - result.should_not be_false - puts result.inspect - end - end - - context ".unset_style" do - it "should works" do - result = Qiniu::RS.unset_style(@bucket, "small.jpg") - result.should_not be_false - puts result.inspect - end - end - -=begin - context ".set_watermark" do - it "should works" do - options = { - :text => "Powered by QiniuRS" - } - result = Qiniu::RS.set_watermark(1, options) - result.should_not be_false - puts result.inspect - end - end - - context ".get_watermark" do - it "should works" do - result = Qiniu::RS.get_watermark(1) - result.should_not be_false - puts result.inspect - end - end -=end - - context ".put_auth" do - it "should works" do - result = Qiniu::RS.put_auth(10) - result.should_not be_false - result.should_not be_empty - puts result.inspect - end - end - - context ".upload" do - it "should works" do - put_url = Qiniu::RS.put_auth(10) - put_url.should_not be_false - put_url.should_not be_empty - puts put_url.inspect - result = Qiniu::RS.upload :url => put_url, - :file => __FILE__, - :bucket => @bucket, - :key => @key, - :mime_type => 'application/x-ruby', - :enable_crc32_check => true - result.should be_true - end - end - context ".put_file" do it "should works" do - result = Qiniu::RS.put_file :file => __FILE__, + result = Qiniu.put_file :file => __FILE__, :bucket => @bucket, :key => @key, :mime_type => 'application/x-ruby', @@ -141,17 +55,57 @@ module Qiniu end end + context ".buckets" do + it "should works" do + result = Qiniu.buckets + result.should_not be_false + puts result.inspect + end + end + + context ".set_protected" do + it "should works" do + result = Qiniu.set_protected(@bucket, 1) + result.should_not be_false + puts result.inspect + end + end + + context ".set_separator" do + it "should works" do + result = Qiniu.set_separator(@bucket, "-") + result.should_not be_false + puts result.inspect + end + end + + context ".set_style" do + it "should works" do + result = Qiniu.set_style(@bucket, "small.jpg", "imageMogr/auto-orient/thumbnail/!120x120r/gravity/center/crop/!120x120/quality/80") + result.should_not be_false + puts result.inspect + end + end + + context ".unset_style" do + it "should works" do + result = Qiniu.unset_style(@bucket, "small.jpg") + result.should_not be_false + puts result.inspect + end + end + context ".upload_file" do it "should works" do uptoken_opts = {:scope => @bucket, :escape => 0} upload_opts = { - :uptoken => Qiniu::RS.generate_upload_token(uptoken_opts), + :uptoken => Qiniu.generate_upload_token(uptoken_opts), :file => __FILE__, :bucket => @bucket, :key => @key, :enable_crc32_check => true } - result = Qiniu::RS.upload_file(upload_opts) + result = Qiniu.upload_file(upload_opts) result.should_not be_false puts result.inspect end @@ -159,24 +113,24 @@ module Qiniu it "should raise MissingArgsError" do uptoken_opts = {:scope => @bucket, :escape => 0} upload_opts = { - :uptoken => Qiniu::RS.generate_upload_token(uptoken_opts), + :uptoken => Qiniu.generate_upload_token(uptoken_opts), :file => __FILE__, :key => @key, :enable_crc32_check => true } - lambda { Qiniu::RS.upload_file(upload_opts) }.should raise_error(RS::MissingArgsError) + lambda { Qiniu.upload_file(upload_opts) }.should raise_error(MissingArgsError) end it "should raise NoSuchFileError" do uptoken_opts = {:scope => @bucket, :escape => 0} upload_opts = { - :uptoken => Qiniu::RS.generate_upload_token(uptoken_opts), + :uptoken => Qiniu.generate_upload_token(uptoken_opts), :file => 'no_this_file', :bucket => @bucket, :key => @key, :enable_crc32_check => true } - lambda { Qiniu::RS.upload_file(upload_opts) }.should raise_error(RS::NoSuchFileError) + lambda { Qiniu.upload_file(upload_opts) }.should raise_error(NoSuchFileError) end end @@ -188,7 +142,7 @@ module Qiniu key = Digest::SHA1.hexdigest(localfile+Time.now.to_s) # generate the upload token uptoken_opts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com", :escape => 0} - uptoken = Qiniu::RS.generate_upload_token(uptoken_opts) + uptoken = Qiniu.generate_upload_token(uptoken_opts) # uploading upload_opts = { :uptoken => uptoken, @@ -197,7 +151,7 @@ module Qiniu :key => key } #uploading - result1 = Qiniu::RS.upload_file(upload_opts) + result1 = Qiniu.upload_file(upload_opts) #drop the bigfile File.unlink(localfile) if File.exists?(localfile) #expect @@ -205,11 +159,11 @@ module Qiniu result1.should_not be_false result1.should_not be_empty #stat - result2 = Qiniu::RS.stat(@bucket, key) + result2 = Qiniu.stat(@bucket, key) puts result2.inspect result2.should_not be_false #delete - result3 = Qiniu::RS.delete(@bucket, key) + result3 = Qiniu.delete(@bucket, key) puts result3.inspect result3.should_not be_false end @@ -217,7 +171,7 @@ module Qiniu context ".stat" do it "should works" do - result = Qiniu::RS.stat(@bucket, @key) + result = Qiniu.stat(@bucket, @key) result.should_not be_false result.should_not be_empty puts result.inspect @@ -226,7 +180,7 @@ module Qiniu context ".get" do it "should works" do - result = Qiniu::RS.get(@bucket, @key, "rs_spec.rb", 10) + result = Qiniu.get(@bucket, @key, "rs_spec.rb", 10) result.should_not be_false result.should_not be_empty puts result.inspect @@ -235,7 +189,7 @@ module Qiniu context ".download" do it "should works" do - result = Qiniu::RS.download(@bucket, @key, "rs_spec.rb", 10) + result = Qiniu.download(@bucket, @key, "rs_spec.rb", 10) result.should_not be_false result.should_not be_empty puts result.inspect @@ -244,7 +198,7 @@ module Qiniu context ".batch" do it "should works" do - result = Qiniu::RS.batch("stat", @bucket, [@key]) + result = Qiniu.batch("stat", @bucket, [@key]) result.should_not be_false result.should_not be_empty puts result.inspect @@ -253,7 +207,7 @@ module Qiniu context ".batch_stat" do it "should works" do - result = Qiniu::RS.batch_stat(@bucket, [@key]) + result = Qiniu.batch_stat(@bucket, [@key]) result.should_not be_false result.should_not be_empty puts result.inspect @@ -262,7 +216,7 @@ module Qiniu context ".batch_get" do it "should works" do - result = Qiniu::RS.batch_get(@bucket, [@key]) + result = Qiniu.batch_get(@bucket, [@key]) result.should_not be_false result.should_not be_empty puts result.inspect @@ -271,7 +225,7 @@ module Qiniu context ".batch_download" do it "should works" do - result = Qiniu::RS.batch_download(@bucket, [@key]) + result = Qiniu.batch_download(@bucket, [@key]) result.should_not be_false result.should_not be_empty puts result.inspect @@ -281,7 +235,7 @@ module Qiniu =begin context ".publish" do it "should works" do - result = Qiniu::RS.publish(@domain, @bucket) + result = Qiniu.publish(@domain, @bucket) result.should_not be_false end end @@ -290,99 +244,103 @@ module Qiniu =begin context ".unpublish" do it "should works" do - result = Qiniu::RS.unpublish(@domain) + result = Qiniu.unpublish(@domain) result.should_not be_false end end =end +=begin context ".batch_copy" do it "should works" do - result = Qiniu::RS.batch_copy [@bucket, @key, @bucket, @key2] + result = Qiniu.batch_copy [@bucket, @key, @bucket, @key2] result.should_not be_false - #result2 = Qiniu::RS.stat(@bucket, @key2) + #result2 = Qiniu.stat(@bucket, @key2) #result2.should_not be_false end end context ".batch_move" do it "should works" do - result = Qiniu::RS::RS.batch_move [@bucket, @key, @bucket, @key2] + result = Qiniu.batch_move [@bucket, @key, @bucket, @key2] result.should_not be_false - #result2 = Qiniu::RS.stat(@bucket, @key2) + #result2 = Qiniu.stat(@bucket, @key2) #result2.should_not be_false - result3 = Qiniu::RS.batch_move [@bucket, @key2, @bucket, @key] + result3 = Qiniu.batch_move [@bucket, @key2, @bucket, @key] result3.should_not be_false end end +=end context ".move" do it "should works" do - result = Qiniu::RS.move(@bucket, @key, @bucket, @key2) + result = Qiniu.move(@bucket, @key, @bucket, @key2) result.should_not be_false - result2 = Qiniu::RS.stat(@bucket, @key2) + result2 = Qiniu.stat(@bucket, @key2) result2.should_not be_false - result3 = Qiniu::RS.move(@bucket, @key2, @bucket, @key) + result3 = Qiniu.move(@bucket, @key2, @bucket, @key) result3.should_not be_false end end context ".copy" do it "should works" do - result = Qiniu::RS.copy(@bucket, @key, @bucket, @key2) + result = Qiniu.copy(@bucket, @key, @bucket, @key2) result.should_not be_false - #result2 = Qiniu::RS.stat(@bucket, @key2) + #result2 = Qiniu.stat(@bucket, @key2) #result2.should_not be_false end end context ".delete" do it "should works" do - result = Qiniu::RS.delete(@bucket, @key) + result = Qiniu.delete(@bucket, @key) result.should_not be_false end end context ".drop" do it "should works" do - result = Qiniu::RS.drop(@bucket) + result = Qiniu.drop(@bucket) result.should_not be_false end end context ".image_info" do it "should works" do - data = Qiniu::RS.get(@test_image_bucket, @test_image_key) + data = Qiniu.get(@test_image_bucket, @test_image_key) data.should_not be_false data.should_not be_empty puts data.inspect - result = Qiniu::RS.image_info(data["url"]) + result = Qiniu.image_info(data["url"]) result.should_not be_false result.should_not be_empty puts result.inspect end end +=begin context ".image_exif" do it "should works" do - data = Qiniu::RS.get(@test_image_bucket, @test_image_key) + data = Qiniu.get(@test_image_bucket, @test_image_key) data.should_not be_false data.should_not be_empty puts data.inspect - result = Qiniu::RS.image_exif(data["url"]) + result = Qiniu.image_exif(data["url"]) puts result.inspect end end +=end context ".image_mogrify_save_as" do it "should works" do - data = Qiniu::RS.get(@test_image_bucket, @test_image_key) + data = Qiniu.get(@test_image_bucket, @test_image_key) data.should_not be_false data.should_not be_empty puts data.inspect @@ -398,7 +356,7 @@ module Qiniu :format => "jpg", :auto_orient => true } - result2 = Qiniu::RS.image_mogrify_save_as(@test_image_bucket, dest_key, src_img_url, mogrify_options) + result2 = Qiniu.image_mogrify_save_as(@test_image_bucket, dest_key, src_img_url, mogrify_options) result2.should_not be_false result2.should_not be_empty puts result2.inspect @@ -407,7 +365,7 @@ module Qiniu context ".generate_upload_token" do it "should works" do - data = Qiniu::RS.generate_upload_token({:scope => @bucket, :expires_in => 3600, :escape => 0}) + data = Qiniu.generate_upload_token({:scope => @bucket, :expires_in => 3600, :escape => 0}) data.should_not be_empty puts data.inspect data.split(":").length.should == 3 @@ -416,7 +374,7 @@ module Qiniu context ".generate_download_token" do it "should works" do - data = Qiniu::RS.generate_download_token({:expires_in => 1, :pattern => 'http://*.dn.qbox.me/*'}) + data = Qiniu.generate_download_token({:expires_in => 1, :pattern => 'http://*.dn.qbox.me/*'}) data.should_not be_empty puts data.inspect data.split(":").length.should == 3 @@ -424,4 +382,4 @@ module Qiniu end end -end +end # module Qiniu diff --git a/spec/qiniu/rs/auth_spec.rb b/spec/qiniu/rs/auth_spec.rb deleted file mode 100755 index e7b9d6a..0000000 --- a/spec/qiniu/rs/auth_spec.rb +++ /dev/null @@ -1,58 +0,0 @@ -# -*- encoding: utf-8 -*- - -require 'spec_helper' -require 'qiniu/rs/auth' - -module Qiniu - module RS - describe Auth do - - before :all do - @username = "qboxtest" - @password = "qboxtest123" - - code, data = Qiniu::RS::Auth.exchange_by_password!(@username, @password) - code.should == 200 - data.should be_an_instance_of(Hash) - data["access_token"].should_not be_empty - data["refresh_token"].should_not be_empty - data["refresh_token"].should_not be_empty - - @access_token = data["access_token"] - @refresh_token = data["refresh_token"] - puts data.inspect - end - - context ".exchange_by_password" do - it "should sign in failed when pass a non-existent username" do - code, data = Qiniu::RS::Auth.exchange_by_password!("a_non_existent_user@example.com", "password") - code.should == 401 - data["error_code"].should == 11 - data["error"].should == "failed_authentication" - puts data.inspect - end - - it "should sign in failed when pass a wrong password" do - code, data = Qiniu::RS::Auth.exchange_by_password!(@username, "a-wrong-password") - code.should == 401 - data["error_code"].should == 11 - data["error"].should == "failed_authentication" - puts data.inspect - end - end - - context ".exchange_by_refresh_token" do - it "should works" do - @refresh_token.should_not be_empty - code, data = Qiniu::RS::Auth.exchange_by_refresh_token!(@refresh_token) - code.should == 200 - data["access_token"].should_not be_empty - data["refresh_token"].should_not be_empty - data["expires_in"].should_not be_zero - puts data.inspect - end - end - - end - end -end diff --git a/spec/qiniu/rs/eu_spec.rb b/spec/qiniu/rs/eu_spec.rb deleted file mode 100755 index 5e5894a..0000000 --- a/spec/qiniu/rs/eu_spec.rb +++ /dev/null @@ -1,66 +0,0 @@ -# -*- encoding: utf-8 -*- - -require 'spec_helper' -require 'qiniu/rs' -require 'qiniu/rs/pub' -require 'qiniu/rs/eu' - -module Qiniu - module RS - describe EU do - - before :all do - @customer_id = "why404@gmail.com" - @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s - @key = "image_logo_for_test.png" - - result = Qiniu::RS.mkbucket(@bucket) - puts result.inspect - result.should be_true - - local_file = File.expand_path('../' + @key, __FILE__) - upopts = {:scope => @bucket, :expires_in => 3600, :customer => @customer_id} - uptoken = Qiniu::RS.generate_upload_token(upopts) - - data = Qiniu::RS.upload_file :uptoken => uptoken, :file => local_file, :bucket => @bucket, :key => @key - puts data.inspect - - code2, data2 = Qiniu::RS::Pub.set_separator(@bucket, "-") - code2.should == 200 - puts data2.inspect - - code3, data3 = Qiniu::RS::Pub.set_style(@bucket, "small.jpg", "imageView/1/w/120/h/120/q/85/format/jpg/watermark/1") - code3.should == 200 - puts data3.inspect - end - - after :all do - result = Qiniu::RS.drop(@bucket) - puts result.inspect - result.should_not be_false - end - -=begin - context ".set_watermark" do - it "should works" do - options = { - :text => "Powered by QiniuRS" - } - code, data = Qiniu::RS::EU.set_watermark(@customer_id, options) - code.should == 200 - puts data.inspect - end - end - - context ".get_watermark" do - it "should works" do - code, data = Qiniu::RS::EU.get_watermark(@customer_id) - code.should == 200 - puts data.inspect - end - end -=end - - end - end -end diff --git a/spec/qiniu/rs/io_spec.rb b/spec/qiniu/rs/io_spec.rb deleted file mode 100755 index 51075b9..0000000 --- a/spec/qiniu/rs/io_spec.rb +++ /dev/null @@ -1,60 +0,0 @@ -# -*- encoding: utf-8 -*- - -require 'spec_helper' -require 'qiniu/rs/auth' -require 'qiniu/rs/io' -require 'digest/sha1' - -module Qiniu - module RS - describe IO do - - before :all do - @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s - @key = Digest::SHA1.hexdigest((Time.now.to_i+rand(100)).to_s) - - result = Qiniu::RS.mkbucket(@bucket) - puts result.inspect - result.should be_true - end - - after :all do - result = Qiniu::RS.drop(@bucket) - puts result.inspect - result.should_not be_false - end - - context ".upload_file" do - it "should works" do - code, data = Qiniu::RS::IO.put_auth() - code.should == 200 - data["url"].should_not be_empty - data["expiresIn"].should_not be_zero - puts data.inspect - code2, data2 = Qiniu::RS::IO.upload_file(data["url"], __FILE__, @bucket, @key) - code2.should == 200 - puts data2.inspect - end - end - - context ".put_file" do - it "should works" do - code, data = Qiniu::RS::IO.put_file(__FILE__, @bucket, @key, 'application/x-ruby', 'customMeta', true) - code.should == 200 - puts data.inspect - end - end - - context ".upload_with_token" do - it "should works" do - upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"} - uptoken = Qiniu::RS.generate_upload_token(upopts) - code, data = Qiniu::RS::IO.upload_with_token(uptoken, __FILE__, @bucket, @key, nil, nil, nil, true) - code.should == 200 - puts data.inspect - end - end - - end - end -end diff --git a/spec/qiniu/rs/up_spec.rb b/spec/qiniu/rs/up_spec.rb deleted file mode 100755 index 91b0849..0000000 --- a/spec/qiniu/rs/up_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -# -*- encoding: utf-8 -*- - -require 'digest/sha1' -require 'spec_helper' -require 'qiniu/rs/rs' -require 'qiniu/rs/up' - -module Qiniu - module RS - describe UP do - - before :all do - @localfile = "bigfile.txt" - File.open(@localfile, "w"){|f| 5242888.times{f.write(rand(9).to_s)}} - @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s - @key = Digest::SHA1.hexdigest(@localfile+Time.now.to_s) - - code, data = Qiniu::RS::RS.mkbucket(@bucket) - puts [code, data].inspect - code.should == 200 - end - - after :all do - File.unlink(@localfile) if File.exists?(@localfile) - - code, data = Qiniu::RS::RS.drop(@bucket) - puts [code, data].inspect - code.should == 200 - end - - context ".upload_with_token" do - it "should works" do - upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"} - uptoken = Qiniu::RS.generate_upload_token(upopts) - code, data = Qiniu::RS::UP.upload_with_token(uptoken, @localfile, @bucket, @key) - puts data.inspect - (code/100).should == 2 - end - end - - context ".stat" do - it "should exists" do - code, data = Qiniu::RS::RS.stat(@bucket, @key) - puts data.inspect - code.should == 200 - end - end - - context ".delete" do - it "should works" do - code, data = Qiniu::RS::RS.delete(@bucket, @key) - puts data.inspect - code.should == 200 - end - end - - end - end -end diff --git a/spec/qiniu/rs/version_spec.rb b/spec/qiniu/rs/version_spec.rb deleted file mode 100755 index 4df286b..0000000 --- a/spec/qiniu/rs/version_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -# -*- encoding: utf-8 -*- - -require 'spec_helper' -require 'qiniu/rs/version' - -describe Qiniu::RS::Version do - it "should has a VERSION" do - Qiniu::RS::Version.to_s.should =~ /^\d+\.\d+\.\d+?$/ - end -end diff --git a/spec/qiniu/upload_spec.rb b/spec/qiniu/upload_spec.rb new file mode 100755 index 0000000..4739c31 --- /dev/null +++ b/spec/qiniu/upload_spec.rb @@ -0,0 +1,184 @@ +# -*- encoding: utf-8 -*- + +require 'spec_helper' +require 'qiniu/auth' +require 'qiniu/storage' +require 'digest/sha1' + +module Qiniu + module Storage + describe Storage do + + before :all do + @bucket = 'RubySdkTest' + (Time.now.to_i+rand(1000)).to_s + @key = Digest::SHA1.hexdigest((Time.now.to_i+rand(100)).to_s) + + @localfile1 = "bigfile.txt" + File.open(@localfile1, "w"){|f| 5242888.times{ f.write(rand(9).to_s) }} + @key1 = Digest::SHA1.hexdigest(@localfile1+Time.now.to_s) + + @localfile2 = "bigfile2.txt" + File.open(@localfile2, "w"){|f| (1 << 22).times{ f.write(rand(9).to_s) }} + @key2 = Digest::SHA1.hexdigest(@localfile2+Time.now.to_s) + + @localfile3 = "bigfile3.txt" + File.open(@localfile3, "w"){|f| (1 << 23).times{ f.write(rand(9).to_s) }} + @key3 = Digest::SHA1.hexdigest(@localfile3+Time.now.to_s) + + @localfile4 = "smallfile.txt" + File.open(@localfile4, "w"){|f| (1 << 20).times{ f.write(rand(9).to_s) }} + @key4 = Digest::SHA1.hexdigest(@localfile4+Time.now.to_s) + + result = Qiniu.mkbucket(@bucket) + puts result.inspect + result.should be_true + end + + after :all do + File.unlink(@localfile1) if File.exists?(@localfile1) + File.unlink(@localfile2) if File.exists?(@localfile2) + File.unlink(@localfile3) if File.exists?(@localfile3) + File.unlink(@localfile4) if File.exists?(@localfile4) + + result = Qiniu.drop(@bucket) + puts result.inspect + result.should_not be_false + end + + context ".put_file" do + it "should works" do + code, data = Qiniu::Storage.put_file(__FILE__, @bucket, @key, 'application/x-ruby', 'customMeta', true) + code.should == 200 + puts data.inspect + end + end + + context ".upload_with_token" do + it "should works" do + upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"} + uptoken = Qiniu.generate_upload_token(upopts) + code, data = Qiniu::Storage.upload_with_token(uptoken, __FILE__, @bucket, @key, nil, nil, nil, true) + code.should == 200 + puts data.inspect + end + end + + context ".upload_with_token_2" do + it "should works" do + upopts = {:scope => @bucket, :expires_in => 3600, :endUser => "why404@gmail.com"} + uptoken = Qiniu.generate_upload_token(upopts) + + code, data = Qiniu::Storage.upload_with_token_2(uptoken, __FILE__, @key) + + code.should == 200 + puts data.inspect + end + end # .upload_with_token_2 + + context ".resumable_upload_with_token" do + it "should works" do + upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"} + uptoken = Qiniu.generate_upload_token(upopts) + code, data = Qiniu::Storage.resumable_upload_with_token(uptoken, @localfile1, @bucket, @key1) + puts data.inspect + (code/100).should == 2 + end + end + + context ".stat" do + it "should exists" do + code, data = Qiniu::Storage.stat(@bucket, @key1) + puts data.inspect + code.should == 200 + end + end + + context ".delete" do + it "should works" do + code, data = Qiniu::Storage.delete(@bucket, @key1) + puts data.inspect + code.should == 200 + end + end + + context ".resumable_upload_with_token2" do + it "should works" do + upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"} + uptoken = Qiniu.generate_upload_token(upopts) + code, data = Qiniu::Storage.resumable_upload_with_token(uptoken, @localfile2, @bucket, @key2) + puts data.inspect + (code/100).should == 2 + end + end + + context ".stat" do + it "should exists" do + code, data = Qiniu::Storage.stat(@bucket, @key2) + puts data.inspect + code.should == 200 + end + end + + context ".delete" do + it "should works" do + code, data = Qiniu::Storage.delete(@bucket, @key2) + puts data.inspect + code.should == 200 + end + end + + context ".resumable_upload_with_token3" do + it "should works" do + upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"} + uptoken = Qiniu.generate_upload_token(upopts) + code, data = Qiniu::Storage.resumable_upload_with_token(uptoken, @localfile3, @bucket, @key3) + puts data.inspect + (code/100).should == 2 + end + end + + context ".stat" do + it "should exists" do + code, data = Qiniu::Storage.stat(@bucket, @key3) + puts data.inspect + code.should == 200 + end + end + + context ".delete" do + it "should works" do + code, data = Qiniu::Storage.delete(@bucket, @key3) + puts data.inspect + code.should == 200 + end + end + + context ".resumable_upload_with_token4" do + it "should works" do + upopts = {:scope => @bucket, :expires_in => 3600, :customer => "why404@gmail.com"} + uptoken = Qiniu.generate_upload_token(upopts) + code, data = Qiniu::Storage.resumable_upload_with_token(uptoken, @localfile4, @bucket, @key4) + puts data.inspect + (code/100).should == 2 + end + end + + context ".stat" do + it "should exists" do + code, data = Qiniu::Storage.stat(@bucket, @key4) + puts data.inspect + code.should == 200 + end + end + + context ".delete" do + it "should works" do + code, data = Qiniu::Storage.delete(@bucket, @key4) + puts data.inspect + code.should == 200 + end + end + + end + end # module Storage +end # module Qiniu diff --git a/spec/qiniu/rs/utils_spec.rb b/spec/qiniu/utils_spec.rb similarity index 98% rename from spec/qiniu/rs/utils_spec.rb rename to spec/qiniu/utils_spec.rb index 74606c8..fb00074 100755 --- a/spec/qiniu/rs/utils_spec.rb +++ b/spec/qiniu/utils_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' require 'fakeweb' -require 'qiniu/rs/utils' +require 'qiniu/utils' module Qiniu module RS diff --git a/spec/qiniu/version_spec.rb b/spec/qiniu/version_spec.rb new file mode 100755 index 0000000..654ae04 --- /dev/null +++ b/spec/qiniu/version_spec.rb @@ -0,0 +1,10 @@ +# -*- encoding: utf-8 -*- + +require 'spec_helper' +require 'qiniu/version' + +describe Qiniu::Version do + it "should has a VERSION" do + Qiniu::Version.to_s.should =~ /^\d+\.\d+\.\d+?$/ + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index e4a899f..e695e04 100755 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,11 +1,11 @@ # -*- encoding: utf-8 -*- require 'bundler/setup' -require 'qiniu/rs' +require 'qiniu' require 'rspec' RSpec.configure do |config| config.before :all do - Qiniu::RS.establish_connection! :access_key => ENV["QINIU_ACCESS_KEY"], :secret_key => ENV["QINIU_SECRET_KEY"] + Qiniu.establish_connection! :access_key => ENV["QINIU_ACCESS_KEY"], :secret_key => ENV["QINIU_SECRET_KEY"] end end