bos_client 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6b4f7253d95434dfe4780441e9e8abd04de23d7a
4
- data.tar.gz: c07a5b2a3b79b6838b53f951c0abc9a7c60095dd
3
+ metadata.gz: a51335e0701f20bd4f64014d6be8916f1f95dddd
4
+ data.tar.gz: 97b474f581a0073d8dfcae645fb84647e258be49
5
5
  SHA512:
6
- metadata.gz: 729c021c631f4489d9f27943e50aa700b401af2303a39a65b01c26a35e4570a5061c4c75f0c7dabd9be811d812decf06324cae23e30d098b0238b4573d0025a5
7
- data.tar.gz: c558fe178daeba6b80bb577c04458d17e8ffa0bd33178860ac4872177bfad7a8c587b1d665c4af07d39c7c26e78b93f35eceb14c3421d1cfa4204b49eebc4070
6
+ metadata.gz: e7f08a6fce9f9c7cc7a4ecc2a4036b63b5f754aa486d60f86c7348c9d49e2b9390011ee09d04d52b491ca666fe57df20808514d08856c63cfbfd1070d341fccf
7
+ data.tar.gz: bd60fed016b190e4e00847da1dcc1829c6c3746e5c7d37b18cf4c52e5b476a2e6c04a390799694ed94b27f8fb97809145fd30a81f0cadbcdc6efa911de6981f7
data/.travis.yml CHANGED
@@ -1,7 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.2
3
+ - 2.1.2
4
4
  before_script:
5
- - bundle install
5
+ - bundle install
6
6
  script:
7
- - bundle exec rspec
7
+ - bundle exec rspec
8
+ notifications:
9
+ slack:
10
+ secure: RL3pJyyctMFuoTHleabKFXnyRXD6e4rjpj4Mx6juA5Gx+Fy1bj3gl+kmYPJlh81XNGjA3+t0FknswNe0E3eFCfHVyrQ0G+AkOFIwSJ1FNmjKnOi8YfFv6V+ACIft5oucGbe+k0MgZXj0/u+NVqrnePCxFI3rP3vBzr3Ou1n7J7r7SYGrePxpsYVCcmdpUN8TgHjKQRr5TcUPaBTPQcGHZ65hOiI7nsWM35452MTi7+NFql+dhflOCJuiajN96hojaVkzGWZi5bp9A7e4LipdjgmNvpwGkseiksIfZd2pq6Ho20DeEp7mEweyS7wmb4p675g5Aal22jTZkNbZBGFzr55+tqIYSp92iby9InKmPyniO8ivyokO2XdzJkJikzUjXlhfjWKbuKf9hGC6bLHzzeSs1ZS7Ekiyr9kXsnA0xIEPzpc2AjSgS+K6vhQeyon3tnFAEKO9MJIjvgKq/jgOSsV6wc/AkHpFK3nZrjVVBAtpkPZeuvG+q2Gmo2p3ip3i2uqWEFkpAktcWmIt/p9dzE1OR5G+Hf6CNd+t5wLd9T6BtAYT5P/tpaATQ5VrlhnqgJZbQI6umXp2nNQTTA7cgn1ENoQA6R5D+q5v9HE3EPY6cvTZJ+Rs5UjVljsb1pJTs92RbppwLJUm2kMvOpOqRng9qJS1OD/KNFqXBH2TS6o=
11
+ email: false
data/CHANGELOG ADDED
@@ -0,0 +1 @@
1
+ Version 0.1.1 Added save bucket method
data/README.md CHANGED
@@ -1,11 +1,10 @@
1
- # BosClient
2
-
1
+ # BosClient [![Gem Version](https://badge.fury.io/rb/bos_client.svg)](https://badge.fury.io/rb/bos_client) ![](https://travis-ci.org/fcce/bos.svg?branch=master)
3
2
  ## Installation
4
3
 
5
4
  Add this line to your application's Gemfile:
6
5
 
7
6
  ```ruby
8
- gem 'bos', :git => 'git@github.com:fcce/bos.git'
7
+ gem 'bos_client'
9
8
  ```
10
9
 
11
10
  And then execute:
@@ -16,8 +15,6 @@ Or install it yourself as:
16
15
 
17
16
  $ gem install bos_client
18
17
 
19
- ## Usage
20
-
21
18
 
22
19
  ## Development
23
20
 
data/Rakefile CHANGED
@@ -1,2 +1 @@
1
- require "bundler/gem_tasks"
2
-
1
+ require 'bundler/gem_tasks'
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "bos_client"
3
+ require 'bundler/setup'
4
+ require 'bos_client'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "bos_client"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start
data/bos_client.gemspec CHANGED
@@ -4,25 +4,26 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'bos_client/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "bos_client"
7
+ spec.name = 'bos_client'
8
8
  spec.version = BosClient::VERSION
9
- spec.authors = ["Feng Ce"]
10
- spec.email = ["kalelfc@gmail.com"]
9
+ spec.authors = ['Feng Ce']
10
+ spec.email = ['kalelfc@gmail.com']
11
11
 
12
- spec.summary = "Baidu Object Storage Unofficial Ruby SDK"
13
- spec.description = "Library for accessing BOS objects and buckets through REST API"
14
- spec.homepage = "http://github.com/fcce/bos"
15
- spec.license = "MIT"
12
+ spec.summary = 'Baidu Object Storage Unofficial Ruby SDK'
13
+ spec.description = 'Library for accessing BOS objects and buckets through
14
+ REST API'
15
+ spec.homepage = 'http://github.com/fcce/bos'
16
+ spec.license = 'MIT'
16
17
 
17
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
20
21
 
21
- spec.required_ruby_version = ">= 2.0"
22
+ spec.required_ruby_version = '>= 2.0'
22
23
 
23
- spec.add_runtime_dependency "typhoeus", "~> 1.1"
24
- spec.add_development_dependency "bundler", "~> 1.6"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.0"
27
- spec.add_development_dependency "pry", "~> 0.1"
24
+ spec.add_runtime_dependency 'typhoeus', '~> 1.1'
25
+ spec.add_development_dependency 'bundler', '~> 1.6'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.0'
28
+ spec.add_development_dependency 'pry', '~> 0.1'
28
29
  end
@@ -4,38 +4,34 @@ require 'typhoeus'
4
4
  require 'uri'
5
5
  module BosClient
6
6
  class Authable
7
-
8
- def self.authorize_request request
7
+ def self.authorize_request(request)
9
8
  default_headers = get_default_headers request
10
9
  request.options[:headers].merge! default_headers
11
10
  authorization = sign(request)
12
- request.options[:headers].merge!({"Authorization" => authorization})
11
+ request.options[:headers]['Authorization'] = authorization
13
12
  request
14
13
  end
15
14
 
16
- private
17
15
  class << self
18
- def get_canonical_time t = Time.now.to_i
19
- Time.at(t).utc.strftime("%FT%TZ")
16
+ def get_canonical_time(t = Time.now.to_i)
17
+ Time.at(t).utc.strftime('%FT%TZ')
20
18
  end
21
19
 
22
- def get_default_headers request
20
+ def get_default_headers(request)
23
21
  {
24
- "content-type" =>"text/plain",
25
- "x-bce-date" => get_canonical_time,
26
- "content-length" => (request.options[:body] || "").length
22
+ 'content-type' => 'text/plain',
23
+ 'x-bce-date' => get_canonical_time,
24
+ 'content-length' => (request.options[:body] || '').length
27
25
  }
28
- # todo PUT 方法计算的签名错误,content-length 的问题,暂时处理。
29
- # headers.merge!({"content-length" => 0}) if request.options[:method] == :put
30
26
  end
31
27
 
32
- def get_canonical_uri request
33
- uri = URI(request.base_url)
28
+ def get_canonical_uri(request)
29
+ uri = URI(request.base_url)
34
30
  url_path = URI.encode(uri.path)
35
31
  url_path == '' ? '/' : url_path
36
32
  end
37
33
 
38
- def get_canonical_query_string request
34
+ def get_canonical_query_string(request)
39
35
  params = request.options[:params]
40
36
  params = params.map do |k, v|
41
37
  "#{URI.encode(k.to_s)}=#{encode_slash(URI.encode(v.to_s))}"
@@ -43,10 +39,13 @@ module BosClient
43
39
  params
44
40
  end
45
41
 
46
- def get_canonical_headers request
47
- headers_to_sign_keys = ["host", "content-md5", "content-length", "content-type"]
42
+ def get_canonical_headers(request)
43
+ headers_to_sign_keys = ['host',
44
+ 'content-md5',
45
+ 'content-length',
46
+ 'content-type']
48
47
  headers_to_sign = []
49
- canonical_headers_downcase = request.options[:headers].each do |k, v|
48
+ request.options[:headers].each do |k, v|
50
49
  if headers_to_sign_keys.include?(k) || k.start_with?('x-bce')
51
50
  headers_to_sign << "#{encode(k.to_s.downcase)}:#{encode(v.to_s)}"
52
51
  end
@@ -54,21 +53,22 @@ module BosClient
54
53
  headers_to_sign.compact.sort.join("\n")
55
54
  end
56
55
 
57
- def get_http_method request
56
+ def get_http_method(request)
58
57
  (request.options[:method] || 'get').upcase
59
58
  end
60
59
 
61
- def encode string
60
+ def encode(string)
62
61
  URI.encode(string, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
63
62
  end
64
63
 
65
- def encode_slash str
66
- str.gsub(/\//,'%2F')
64
+ def encode_slash(str)
65
+ # str.gsub(/\//, '%2F')
66
+ str.gsub(%r{/}, '%2F')
67
67
  end
68
68
 
69
- def sign request
69
+ def sign(request)
70
70
  digest = OpenSSL::Digest.new('sha256')
71
- sign_key_prefix = "bce-auth-v1/#{BosClient.access_key_id}/#{get_canonical_time()}/#{BosClient.expiration_in_seconds}"
71
+ sign_key_prefix = "bce-auth-v1/#{BosClient.access_key_id}/#{get_canonical_time}/#{BosClient.expiration_in_seconds}"
72
72
  sign_key = OpenSSL::HMAC.hexdigest digest, BosClient.secret_access_key, sign_key_prefix
73
73
 
74
74
  http_method = get_http_method request
@@ -76,7 +76,10 @@ module BosClient
76
76
  canonical_uri = get_canonical_uri request
77
77
  canonical_query_string = get_canonical_query_string request
78
78
  canonical_headers = get_canonical_headers request
79
- string_to_sign = [http_method, canonical_uri, canonical_query_string, canonical_headers].join("\n")
79
+ string_to_sign = [http_method,
80
+ canonical_uri,
81
+ canonical_query_string,
82
+ canonical_headers].join("\n")
80
83
  sign_result = OpenSSL::HMAC.hexdigest digest, sign_key, string_to_sign
81
84
  "#{sign_key_prefix}//#{sign_result}"
82
85
  end
@@ -16,13 +16,11 @@ module BosClient
16
16
  response[:result]
17
17
  end
18
18
 
19
- #create bucket
20
- # 401
21
-
22
- # def save
23
- # request = BosClient::Request.new @bucket_host, method: :put, params:params
24
- # request.run
25
- # end
19
+ def save
20
+ request = BosClient::Request.new @bucket_host, method: :put
21
+ response = request.run
22
+ response[:result]
23
+ end
26
24
 
27
25
  def destory
28
26
  request = BosClient::Request.new @bucket_host, method: :delete
@@ -31,41 +29,42 @@ module BosClient
31
29
  end
32
30
 
33
31
  ## objects
34
- def objects options = {}
35
- response = list_objects options.merge({delimiter: '/'})
32
+ def objects(options = {})
33
+ response = list_objects options.merge(delimiter: '/')
36
34
  objs = response[:data][:contents]
37
- objs.map { |obj| BosClient::Object.new ({bucket:self}.merge(obj)) }
35
+ objs.map { |obj| BosClient::Object.new ({bucket: self}.merge(obj)) }
38
36
  end
39
37
 
40
- def dirs options = {}
38
+ def dirs(options = {})
41
39
  response = list_objects options
42
40
  data = response[:data][:contents]
43
- data = data.find_all{|e| is_dir?(e[:key]) }
41
+ data = data.find_all { |e| is_dir?(e[:key]) }
44
42
  data.map { |e| e[:key] }
45
43
  end
46
44
 
47
- def dir_objects prefix, options = {}
48
- response = list_objects options.merge({delimiter: '/',prefix:prefix})
45
+ def dir_objects(prefix, options = {})
46
+ response = list_objects options.merge(delimiter: '/', prefix: prefix)
49
47
  data = response[:data][:contents]
50
- objs = data.find_all{|e| !is_dir?(e[:key]) }
51
- objs.map { |obj| BosClient::Object.new ({bucket:self}.merge(obj)) }
48
+ objs = data.find_all { |e| !is_dir?(e[:key]) }
49
+ objs.map { |obj| BosClient::Object.new ({bucket: self}.merge(obj)) }
52
50
  end
53
51
 
54
52
  private
55
- def is_dir? name
53
+
54
+ def is_dir?(name)
56
55
  name.end_with?('/')
57
56
  end
58
57
 
59
- def list_objects options = {}
58
+ def list_objects(options = {})
60
59
  prefix = options.fetch(:prefix, nil)
61
60
  max_keys = options.fetch(:max_keys, 1000)
62
61
  marker = options.fetch(:marker, nil)
63
62
  delimiter = options.fetch(:delimiter, nil)
64
- params = {maxKeys: max_keys}
65
- params.merge!({prefix: prefix}) unless prefix.nil?
66
- params.merge!({marker: marker}) unless marker.nil?
67
- params.merge!({delimiter: delimiter}) unless delimiter.nil?
68
- request = BosClient::Request.new @bucket_host, method: :get, params:params
63
+ params = { maxKeys: max_keys }
64
+ params[:prefix] = prefix unless prefix.nil?
65
+ params[:marker] = marker unless marker.nil?
66
+ params[:delimiter] = delimiter unless delimiter.nil?
67
+ request = BosClient::Request.new @bucket_host, method: :get, params: params
69
68
  request.run
70
69
  end
71
70
  end
@@ -1,23 +1,20 @@
1
1
  # encoding: UTF-8
2
2
  module BosClient
3
-
4
- DEFAULTS = {
5
- scheme: 'http',
6
- url: 'bcebos.com',
7
- location: 'bj',
8
- expiration_in_seconds: 1800,
9
- access_key_id: '*****',
10
- secret_access_key: '*****'
11
- }
3
+ DEFAULTS = {
4
+ scheme: 'http',
5
+ url: 'bcebos.com',
6
+ location: 'bj',
7
+ expiration_in_seconds: 1800,
8
+ access_key_id: '*****',
9
+ secret_access_key: '*****'
10
+ }.freeze
12
11
 
13
12
  class << self
14
13
  def options
15
14
  @options ||= DEFAULTS.dup
16
15
  end
17
16
 
18
- def options=(opts)
19
- @options = opts
20
- end
17
+ attr_writer :options
21
18
 
22
19
  def configure
23
20
  yield self
@@ -26,17 +23,15 @@ module BosClient
26
23
  def host
27
24
  "#{options[:scheme]}://#{options[:location]}.#{options[:url]}"
28
25
  end
29
-
30
26
  end
31
27
 
32
- DEFAULTS.each do |k, v|
33
- self.define_singleton_method "#{k}=" do |value|
34
- self.options.merge!(k => value)
28
+ DEFAULTS.each do |k, _v|
29
+ define_singleton_method "#{k}=" do |value|
30
+ options.merge!(k => value)
35
31
  end
36
32
 
37
- self.define_singleton_method k do
38
- self.options[k]
33
+ define_singleton_method k do
34
+ options[k]
39
35
  end
40
36
  end
41
-
42
37
  end
@@ -2,17 +2,16 @@
2
2
  module BosClient
3
3
  class Error < StandardError
4
4
  class << self
5
-
6
- def bos_error name, message
7
- unless const_defined?(name)
8
- BosClient::Error.const_set(name.to_sym, Class.new(BosClient::Error)).new(message)
9
- else
5
+ def bos_error(name, message)
6
+ if const_defined?(name)
10
7
  eval "BosClient::Error::#{name}.new \"#{message}\""
8
+ else
9
+ BosClient::Error.const_set(name.to_sym, Class.new(BosClient::Error)).new(message)
11
10
  end
12
11
  end
13
12
 
14
13
  def const_missing(name)
15
- BosClient::Error.const_set(name.to_sym,Class.new(BosClient::Error))
14
+ BosClient::Error.const_set(name.to_sym, Class.new(BosClient::Error))
16
15
  end
17
16
  end
18
17
  end
@@ -1,8 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  module BosClient
3
3
  module Helper
4
-
5
- def snake_hash_keys value
4
+ def snake_hash_keys(value)
6
5
  case value
7
6
  when Array
8
7
  value.map { |v| snake_hash_keys(v) }
@@ -29,10 +28,10 @@ module BosClient
29
28
 
30
29
  def underscore(string)
31
30
  string.gsub(/::/, '/')
32
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
33
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
34
- .tr('-', '_')
35
- .downcase
31
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
32
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
33
+ .tr('-', '_')
34
+ .downcase
36
35
  end
37
36
  end
38
37
  end
@@ -7,71 +7,80 @@ module BosClient
7
7
  @bucket = options[:bucket]
8
8
  @size = options[:size]
9
9
  @file = options[:key]
10
- @path, @name = File.split(options[:key])
10
+ @path, @name = File.split(options[:key])
11
11
  @last_modified = options[:last_modified]
12
12
  @storage_class = options[:storage_class]
13
13
  end
14
14
 
15
-
16
15
  def save
17
16
  save_to nil
18
17
  end
19
18
 
20
- def save_as name
19
+ def save_as(name)
21
20
  save_to nil, name
22
21
  end
23
22
 
24
- def save_to path, name = nil
23
+ def save_to(path, name = nil)
25
24
  headers = {
26
- "host" => @bucket.bucket_host,
27
- }
25
+ 'host' => @bucket.bucket_host
26
+ }
28
27
 
29
28
  params = {}
30
29
  url = URI.encode("http://#{@bucket.bucket_host}/#{@file}")
31
- request = Typhoeus::Request.new(url, method: :get,headers:headers,params:params)
30
+ request = Typhoeus::Request.new url,
31
+ method: :get,
32
+ headers: headers,
33
+ params: params
32
34
  request = BosClient::Authable.authorize_request(request)
33
35
 
34
36
  request.on_complete do |response|
35
- if path
36
- flie = "#{path}/#{name || @name}"
37
- else
38
- flie = "#{name || @name}"
39
- end
37
+ flie = if path
38
+ "#{path}/#{name || @name}"
39
+ else
40
+ (name || @name).to_s
41
+ end
40
42
  write_file flie, response.body
41
43
  end
42
44
  request.run
43
45
  end
44
46
 
45
47
  def destory
46
- request = BosClient::Request.new "#{@bucket.bucket_host}/#{@file}", method: :delete
48
+ request = BosClient::Request.new "#{@bucket.bucket_host}/#{@file}",
49
+ method: :delete
47
50
  response = request.run
48
51
  response[:result]
49
52
  end
50
53
 
51
- def self.upload options = {}
54
+ def self.upload(options = {})
52
55
  bucket = options[:bucket]
53
56
  file = options[:file]
54
57
  origin_file_name = File.basename(file)
55
58
  filename = options[:filename] || origin_file_name
56
59
  path = options[:path] || ''
57
- storage_class = options[:storage_class] || "STANDARD"
60
+ storage_class = options[:storage_class] || 'STANDARD'
58
61
  headers = options[:headers] || {}
59
62
 
60
63
  params = {
61
- append: ""
64
+ append: ''
62
65
  }
63
- headers.merge!({"x-bce-storage-class" => storage_class})
64
- request = BosClient::Request.new "#{bucket.bucket_host}/#{File.join(path,filename)}?append", method: :post, params:params, headers: headers, body: File.open(file,"r").read
66
+ headers['x-bce-storage-class'] = storage_class
67
+
68
+ url = "#{bucket.bucket_host}/#{File.join(path, filename)}?append"
69
+ request = BosClient::Request.new url,
70
+ method: :post,
71
+ params: params,
72
+ headers: headers,
73
+ body: File.open(file, 'r').read
65
74
  response = request.run
66
75
  response[:result]
67
76
  end
68
77
 
69
78
  private
79
+
70
80
  def write_file(filename, data)
71
- file = File.new(filename, "wb")
81
+ file = File.new(filename, 'wb')
72
82
  file.write(data)
73
83
  file.close
74
84
  end
75
-
76
85
  end
77
86
  end
@@ -4,7 +4,7 @@ module BosClient
4
4
  include BosClient::Helper
5
5
  attr_accessor :uri, :options
6
6
 
7
- def initialize url , options={}
7
+ def initialize(url, options = {})
8
8
  @uri = URI(URI.encode(url))
9
9
  @options = options
10
10
  end
@@ -20,8 +20,9 @@ module BosClient
20
20
  end
21
21
 
22
22
  private
23
+
23
24
  def format_request
24
- headers = { "host" => @uri.host }
25
+ headers = { 'host' => @uri.host }
25
26
 
26
27
  if @options[:headers].nil?
27
28
  @options[:headers] = headers
@@ -29,65 +30,59 @@ module BosClient
29
30
  @options[:headers].merge! headers
30
31
  end
31
32
 
32
- if @options[:params].nil?
33
- @options[:params] = {}
34
- end
33
+ @options[:params] = {} if @options[:params].nil?
35
34
 
36
35
  request = Typhoeus::Request.new @uri.to_s, @options
37
36
  BosClient::Authable.authorize_request request
38
37
  end
39
38
 
40
- def resolve_response response
39
+ def resolve_response(response)
41
40
  if response.success?
42
41
  ret = resolve_bos_resault response
43
- return snake_hash_keys(ret)
42
+ snake_hash_keys(ret)
44
43
  elsif response.timed_out?
45
- raise BosClient::Error::TimeOut.new "got a time out"
44
+ raise BosClient::Error::TimeOut, 'got a time out'
46
45
  elsif response.code == 0
47
- raise BosClient::Error::HttpError.new response.return_message
46
+ raise BosClient::Error::HttpError, response.return_message
48
47
  else
49
48
  ret = resolve_bos_resault response
50
49
  if ret[:data][:code]
51
- raise BosClient::Error.bos_error ret[:data][:code], ret[:data][:message]
50
+ raise BosClient::Error.bos_error ret[:data][:code], ret[:data][:message]
52
51
  else
53
- raise BosClient::Error::HttpError.new "HTTP request failed: #{response.code.to_s}"
52
+ raise BosClient::Error::HttpError, "HTTP request failed: #{response.code}"
54
53
  end
55
54
  end
56
55
  end
57
56
 
58
- def resolve_bos_resault r
59
- begin
60
- if r.body.size > 0
61
- ret = JSON.parse r.body,{:symbolize_names => true}
62
- else
63
- ret = {}
64
- end
57
+ def resolve_bos_resault(r)
58
+ ret = if !r.body.empty?
59
+ JSON.parse r.body, symbolize_names: true
60
+ else
61
+ {}
62
+ end
65
63
 
66
- result = {
67
- result: true,
68
- status: r.code,
69
- ts: Time.now.to_i,
70
- version: 1.0,
71
- data: ret
72
- }
73
- rescue Exception => e
74
- raise BosClient::Error::JSONError.new e.message
75
- end
64
+ {
65
+ result: true,
66
+ status: r.code,
67
+ ts: Time.now.to_i,
68
+ version: 1.0,
69
+ data: ret
70
+ }
71
+ rescue StandardError => e
72
+ raise BosClient::Error::JSONError, e.message
76
73
  end
77
74
 
78
- def resolve_response_headers r
79
- begin
80
- ret = JSON.parse r.headers,{:symbolize_names => true}
81
- result = {
82
- result: true,
83
- status: r.code,
84
- ts: Time.now.to_i,
85
- version: 1.0,
86
- data: ret
87
- }
88
- rescue Exception => e
89
- raise BosClient::Error::JSONError.new e.message
90
- end
75
+ def resolve_response_headers(r)
76
+ ret = JSON.parse r.headers, symbolize_names: true
77
+ {
78
+ result: true,
79
+ status: r.code,
80
+ ts: Time.now.to_i,
81
+ version: 1.0,
82
+ data: ret
83
+ }
84
+ rescue StandardError => e
85
+ raise BosClient::Error::JSONError, e.message
91
86
  end
92
87
  end
93
88
  end
@@ -1,7 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  module BosClient
3
3
  class << self
4
-
5
4
  def buckets
6
5
  list_buckets unless @result
7
6
  @result[:buckets].map { |bk| Bucket.new bk }
@@ -13,6 +12,7 @@ module BosClient
13
12
  end
14
13
 
15
14
  private
15
+
16
16
  def list_buckets
17
17
  url = host.to_s
18
18
  request = BosClient::Request.new url, method: :get
@@ -1,3 +1,3 @@
1
1
  module BosClient
2
- VERSION = "0.1.0"
2
+ VERSION = '0.1.1'.freeze
3
3
  end
data/lib/bos_client.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # encoding: UTF-8
2
2
  require 'json'
3
3
  require 'uri'
4
- require "bos_client/version"
5
- require "bos_client/config"
4
+ require 'bos_client/version'
5
+ require 'bos_client/config'
6
6
  require 'bos_client/auth'
7
7
  require 'bos_client/helper'
8
8
  require 'bos_client/service'
@@ -11,5 +11,4 @@ require 'bos_client/request'
11
11
  require 'bos_client/bucket'
12
12
  require 'bos_client/object'
13
13
  module BosClient
14
-
15
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bos_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Feng Ce
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-15 00:00:00.000000000 Z
11
+ date: 2017-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -80,7 +80,9 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.1'
83
- description: Library for accessing BOS objects and buckets through REST API
83
+ description: |-
84
+ Library for accessing BOS objects and buckets through
85
+ REST API
84
86
  email:
85
87
  - kalelfc@gmail.com
86
88
  executables: []
@@ -90,6 +92,7 @@ files:
90
92
  - ".gitignore"
91
93
  - ".rspec"
92
94
  - ".travis.yml"
95
+ - CHANGELOG
93
96
  - CODE_OF_CONDUCT.md
94
97
  - Gemfile
95
98
  - LICENSE.txt
@@ -128,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
131
  version: '0'
129
132
  requirements: []
130
133
  rubyforge_project:
131
- rubygems_version: 2.2.2
134
+ rubygems_version: 2.6.10
132
135
  signing_key:
133
136
  specification_version: 4
134
137
  summary: Baidu Object Storage Unofficial Ruby SDK