ucloud_storage 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -18,11 +18,29 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- ucloud = UcloudStorage.new
22
- ucloud.user = "email"
23
- ucloud.pass = "API KEY"
21
+ ucloud = UcloudStorage.new(user: 'email', pass: 'API_KEY')
22
+
24
23
  ucloud.authoize
25
24
  ucloud.upload(filepath, boxname, destination)
25
+ ucloud.delte(boxname, destination)
26
+
27
+ ## Configuration
28
+
29
+ Set default user/pass info
30
+
31
+ UcloudStorage.configure do |config|
32
+ config.user = 'email'
33
+ config.pass = 'API KEY'
34
+ end
35
+
36
+ ## Response block
37
+
38
+ Every request yields a response
39
+
40
+ ucloud.upload(filepath, boxname, dest) do |response|
41
+ response_code = response.code
42
+ end
43
+
26
44
 
27
45
  ## Contributing
28
46
 
@@ -1,8 +1,15 @@
1
1
  require_relative 'ucloud_storage/ucloud_storage'
2
+ require_relative 'ucloud_storage/configuration'
2
3
  require_relative 'ucloud_storage/version'
4
+ require 'forwardable'
3
5
 
4
6
  module UcloudStorage
5
- def self.new
6
- UcloudStorage.new
7
+ class << self
8
+ extend Forwardable
9
+ def_delegators Configuration, :user, :pass, :configure
10
+ end
11
+
12
+ def self.new(options={})
13
+ UcloudStorage.new(options)
7
14
  end
8
15
  end
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+
3
+ module UcloudStorage
4
+ module Configuration
5
+ class << self
6
+ attr_accessor :user
7
+ attr_accessor :pass
8
+ end
9
+
10
+ def self.configure
11
+ yield self
12
+ end
13
+ end
14
+ end
@@ -6,40 +6,56 @@ module UcloudStorage
6
6
  class NotAuthorized < StandardError; end
7
7
 
8
8
  class UcloudStorage
9
- attr_accessor :user, :pass, :storage_url, :auth_token, :response_code
9
+ attr_accessor :user, :pass, :storage_url, :auth_token
10
+
11
+ def initialize(options={})
12
+ @user = options.fetch(:user) { Configuration.user }
13
+ @pass = options.fetch(:pass) { Configuration.pass }
14
+ end
10
15
 
11
16
  def authorize
12
- response = HTTParty.get("https://api.ucloudbiz.olleh.com/storage/v1/auth/",
13
- headers: { "X-Storage-User" => user, "X-Storage-Pass" => pass})
17
+ response = HTTParty.get("https://api.ucloudbiz.olleh.com/storage/v1/auth/",
18
+ headers: { "X-Storage-User" => user,
19
+ "X-Storage-Pass" => pass })
20
+
21
+ yield response if block_given?
22
+
14
23
  case response.code
15
- when 200 then
24
+ when 200
16
25
  self.storage_url = response.headers["X-Storage-Url"]
17
26
  self.auth_token = response.headers["X-Auth-Token"]
18
27
  true
19
- when 401 then
20
- false
21
- else
22
- raise TotalyWrongException
28
+ when 401 then false
29
+ else raise TotalyWrongException
23
30
  end
24
31
  end
25
32
 
26
33
  def upload(file_path, box_name, destination)
27
34
  raise NotAuthorized if storage_url.nil?
28
- file = File.new(file_path)
29
- contenttype = `file --mime-type #{file_path}`.split(": ").last
30
- response = HTTParty.put(storage_url+ "/#{box_name}/#{destination}",
31
- headers: {
32
- "X-Auth-Token" => auth_token,
33
- "Content-Type" => contenttype,
34
- "Content-Length" => file.size.to_s },
35
- body: file.read)
36
- self.response_code = response.code
37
- case self.response_code
38
- when 201 then
39
- true
40
- else
41
- false
42
- end
35
+
36
+ file = File.new(file_path)
37
+ content_type = `file --mime-type #{file_path}`.split(": ").last
38
+ response = HTTParty.put(storage_url+ "/#{box_name}/#{destination}",
39
+ headers: {
40
+ "X-Auth-Token" => auth_token,
41
+ "Content-Type" => content_type,
42
+ "Content-Length" => file.size.to_s },
43
+ body: file.read)
44
+
45
+ yield response if block_given?
46
+
47
+ response.code == 201 ? true : false
48
+ end
49
+
50
+ def delete(box_name, destination)
51
+ raise NotAuthorized if storage_url.nil?
52
+
53
+ response = HTTParty.delete(storage_url+ "/#{box_name}/#{destination}",
54
+ headers: { "X-Auth-Token" => auth_token })
55
+
56
+ yield response if block_given?
57
+
58
+ response.code == 204 ? true : false
43
59
  end
44
60
  end
45
61
  end
@@ -1,3 +1,3 @@
1
1
  module UcloudStorage
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
data/spec/support/vcr.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  VCR.configure do |c|
2
2
  c.cassette_library_dir = File.join(File.dirname(__FILE__), "../fixtures/vcr_cassettes")
3
+ c.allow_http_connections_when_no_cassette = true
3
4
  c.hook_into :webmock
4
5
  end
@@ -6,13 +6,31 @@ require 'support/vcr'
6
6
  require 'yaml'
7
7
 
8
8
  describe UcloudStorage do
9
+ context "set user/pass info" do
10
+ before do
11
+ UcloudStorage.configure do |config|
12
+ config.user = "abc@mintshop.com"
13
+ config.pass = "my_api_key"
14
+ end
15
+ end
16
+
17
+ it "can set default user/pass info" do
18
+ UcloudStorage.user.should == "abc@mintshop.com"
19
+ UcloudStorage.pass.should == "my_api_key"
20
+ end
21
+
22
+ it 'uses default uesr/pass info when initialized' do
23
+ ucloud = UcloudStorage.new
24
+ ucloud.user.should == "abc@mintshop.com"
25
+ ucloud.pass.should == "my_api_key"
26
+ end
27
+ end
28
+
9
29
  let(:valid_ucloud) do
10
- ucloud = UcloudStorage.new
11
30
  file = File.open(File.join(File.dirname(__FILE__), "/support/auth_info.yml"))
12
31
  auth_info = YAML.load(file)
13
- ucloud.user = auth_info["valid_user"]["user"]
14
- ucloud.pass = auth_info["valid_user"]["pass"]
15
- ucloud
32
+ ucloud = UcloudStorage.new(user: auth_info["valid_user"]["user"],
33
+ pass: auth_info["valid_user"]["pass"])
16
34
  end
17
35
 
18
36
  let(:invalid_ucloud) do
@@ -22,57 +40,104 @@ describe UcloudStorage do
22
40
  invlaid_ucloud
23
41
  end
24
42
 
25
- it "can authorize with valid user/pass" do
26
- VCR.use_cassette("storage/v1/auth") do
27
- valid_ucloud.authorize.should == true
28
- valid_ucloud.storage_url.should_not be_nil
29
- valid_ucloud.auth_token.should_not be_nil
43
+ describe '#authorize' do
44
+ it "can authorize with valid user/pass" do
45
+ VCR.use_cassette("storage/v1/auth") do
46
+ valid_ucloud.authorize.should == true
47
+ valid_ucloud.storage_url.should_not be_nil
48
+ valid_ucloud.auth_token.should_not be_nil
49
+ end
30
50
  end
31
- end
32
51
 
33
- it "cannot authorize with invalid user/pass" do
34
- VCR.use_cassette("storage/v1/auth_fail") do
35
- invalid_ucloud.authorize.should == false
36
- invalid_ucloud.storage_url.should be_nil
37
- invalid_ucloud.auth_token.should be_nil
52
+ it "cannot authorize with invalid user/pass" do
53
+ VCR.use_cassette("storage/v1/auth_fail") do
54
+ invalid_ucloud.authorize.should == false
55
+ invalid_ucloud.storage_url.should be_nil
56
+ invalid_ucloud.auth_token.should be_nil
57
+ end
58
+ end
59
+
60
+ it 'yields response' do
61
+ VCR.use_cassette("storage/v1/auth") do
62
+ valid_ucloud.authorize do |response|
63
+ response.code.should == 200
64
+ end
65
+ end
38
66
  end
39
67
  end
40
68
 
41
- it "can upload a file" do
42
- VCR.use_cassette('storage/v1/auth') do
43
- valid_ucloud.authorize
69
+ describe "#upload" do
70
+ it "can upload a file" do
71
+ VCR.use_cassette('storage/v1/auth') do
72
+ valid_ucloud.authorize
73
+ end
74
+
75
+ file_path = File.join(File.dirname(__FILE__), "/fixtures/sample_file.txt")
76
+ box = 'dev'
77
+ destination = 'cropped_images/'+Pathname(file_path).basename.to_s
78
+
79
+ VCR.use_cassette("v1/put_storage_object") do
80
+ valid_ucloud.upload(file_path, box, destination).should be_true
81
+ end
44
82
  end
45
83
 
46
- file_path = File.join(File.dirname(__FILE__), "/fixtures/sample_file.txt")
47
- box = 'dev'
48
- destination = 'cropped_images/'+Pathname(file_path).basename.to_s
84
+ it "should fail to upload with invalid file path" do
85
+ VCR.use_cassette('storage/v1/auth') do
86
+ valid_ucloud.authorize
87
+ end
88
+
89
+ file_path = File.join(File.dirname(__FILE__), "/fixtures/no_sample_file.txt")
90
+ box = 'dev'
91
+ destination = 'cropped_images/'+Pathname(file_path).basename.to_s
49
92
 
50
- VCR.use_cassette("v1/put_storage_object") do
51
- valid_ucloud.upload(file_path, box, destination).should be_true
93
+ expect {
94
+ valid_ucloud.upload(file_path, box, destination)
95
+ }.to raise_error(Errno::ENOENT)
52
96
  end
53
- end
54
97
 
55
- it "should fail to upload with invalid file path" do
56
- VCR.use_cassette('storage/v1/auth') do
57
- valid_ucloud.authorize
98
+ it "should fail to upload without authorization" do
99
+ file_path = File.join(File.dirname(__FILE__), "/fixtures/sample_file.txt")
100
+ box = 'dev'
101
+ destination = 'cropped_images/'+Pathname(file_path).basename.to_s
102
+
103
+ expect {
104
+ valid_ucloud.upload(file_path, box, destination).should be_true
105
+ }.to raise_error(UcloudStorage::NotAuthorized)
58
106
  end
59
107
 
60
- file_path = File.join(File.dirname(__FILE__), "/fixtures/no_sample_file.txt")
61
- box = 'dev'
62
- destination = 'cropped_images/'+Pathname(file_path).basename.to_s
108
+ it 'yields response' do
109
+ VCR.use_cassette('storage/v1/auth') do
110
+ valid_ucloud.authorize
111
+ end
63
112
 
64
- expect {
65
- valid_ucloud.upload(file_path, box, destination)
66
- }.to raise_error(Errno::ENOENT)
113
+ file_path = File.join(File.dirname(__FILE__), "/fixtures/sample_file.txt")
114
+ box = 'dev'
115
+ destination = 'cropped_images/'+Pathname(file_path).basename.to_s
116
+
117
+ VCR.use_cassette("v1/put_storage_object") do
118
+ valid_ucloud.upload(file_path, box, destination) do |response|
119
+ response.code.should == 201
120
+ end
121
+ end
122
+ end
67
123
  end
68
124
 
69
- it "should fail to upload without authorization" do
70
- file_path = File.join(File.dirname(__FILE__), "/fixtures/sample_file.txt")
71
- box = 'dev'
72
- destination = 'cropped_images/'+Pathname(file_path).basename.to_s
125
+ describe "#delete" do
126
+ it 'should delete updated object' do
127
+ valid_ucloud.authorize
128
+ file_path = File.join(File.dirname(__FILE__), "/fixtures/sample_file.txt")
129
+ box = 'dev_box'
130
+ destination = 'cropped_images/'+Pathname(file_path).basename.to_s
73
131
 
74
- expect {
75
- valid_ucloud.upload(file_path, box, destination).should be_true
76
- }.to raise_error(UcloudStorage::NotAuthorized)
132
+ VCR.use_cassette("v1/put_storage_object_02") do
133
+ valid_ucloud.upload(file_path, box, destination)
134
+ end
135
+
136
+ VCR.use_cassette("v1/delete_storage_object_02") do
137
+ valid_ucloud.delete(box, destination) do |response|
138
+ response.code.should == 204
139
+ end.should == true
140
+ end
141
+ end
77
142
  end
78
143
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ucloud_storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-04-29 00:00:00.000000000 Z
13
+ date: 2013-05-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
- requirement: !ruby/object:Gem::Requirement
17
+ requirement: &70243330790660 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,15 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ! '>='
29
- - !ruby/object:Gem::Version
30
- version: '0'
25
+ version_requirements: *70243330790660
31
26
  - !ruby/object:Gem::Dependency
32
27
  name: vcr
33
- requirement: !ruby/object:Gem::Requirement
28
+ requirement: &70243330790220 !ruby/object:Gem::Requirement
34
29
  none: false
35
30
  requirements:
36
31
  - - ! '>='
@@ -38,15 +33,10 @@ dependencies:
38
33
  version: '0'
39
34
  type: :development
40
35
  prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ! '>='
45
- - !ruby/object:Gem::Version
46
- version: '0'
36
+ version_requirements: *70243330790220
47
37
  - !ruby/object:Gem::Dependency
48
38
  name: webmock
49
- requirement: !ruby/object:Gem::Requirement
39
+ requirement: &70243330789780 !ruby/object:Gem::Requirement
50
40
  none: false
51
41
  requirements:
52
42
  - - ! '>='
@@ -54,15 +44,10 @@ dependencies:
54
44
  version: '0'
55
45
  type: :development
56
46
  prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: '0'
47
+ version_requirements: *70243330789780
63
48
  - !ruby/object:Gem::Dependency
64
49
  name: httparty
65
- requirement: !ruby/object:Gem::Requirement
50
+ requirement: &70243330789300 !ruby/object:Gem::Requirement
66
51
  none: false
67
52
  requirements:
68
53
  - - ! '>='
@@ -70,12 +55,7 @@ dependencies:
70
55
  version: '0'
71
56
  type: :runtime
72
57
  prerelease: false
73
- version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
- requirements:
76
- - - ! '>='
77
- - !ruby/object:Gem::Version
78
- version: '0'
58
+ version_requirements: *70243330789300
79
59
  description: ucloud storage API
80
60
  email:
81
61
  - wangsy@wangsy.com
@@ -84,36 +64,21 @@ executables: []
84
64
  extensions: []
85
65
  extra_rdoc_files: []
86
66
  files:
87
- - !binary |-
88
- LmdpdGlnbm9yZQ==
89
- - !binary |-
90
- Q0hBTkdFTE9H
91
- - !binary |-
92
- R2VtZmlsZQ==
93
- - !binary |-
94
- R2VtZmlsZS5sb2Nr
95
- - !binary |-
96
- TElDRU5TRQ==
97
- - !binary |-
98
- UkVBRE1FLm1k
99
- - !binary |-
100
- UmFrZWZpbGU=
101
- - !binary |-
102
- bGliL3VjbG91ZF9zdG9yYWdlLnJi
103
- - !binary |-
104
- bGliL3VjbG91ZF9zdG9yYWdlL3VjbG91ZF9zdG9yYWdlLnJi
105
- - !binary |-
106
- bGliL3VjbG91ZF9zdG9yYWdlL3ZlcnNpb24ucmI=
107
- - !binary |-
108
- c3BlYy9maXh0dXJlcy9zYW1wbGVfZmlsZS50eHQ=
109
- - !binary |-
110
- c3BlYy9zdXBwb3J0L2F1dGhfaW5mby5zYW1wbGUueW1s
111
- - !binary |-
112
- c3BlYy9zdXBwb3J0L3Zjci5yYg==
113
- - !binary |-
114
- c3BlYy91Y2xvdWRfc3RvcmFnZV9zcGVjLnJi
115
- - !binary |-
116
- dWNsb3VkX3N0b3JhZ2UuZ2Vtc3BlYw==
67
+ - .gitignore
68
+ - CHANGELOG
69
+ - Gemfile
70
+ - LICENSE
71
+ - README.md
72
+ - Rakefile
73
+ - lib/ucloud_storage.rb
74
+ - lib/ucloud_storage/configuration.rb
75
+ - lib/ucloud_storage/ucloud_storage.rb
76
+ - lib/ucloud_storage/version.rb
77
+ - spec/fixtures/sample_file.txt
78
+ - spec/support/auth_info.sample.yml
79
+ - spec/support/vcr.rb
80
+ - spec/ucloud_storage_spec.rb
81
+ - ucloud_storage.gemspec
117
82
  homepage: https://github.com/wangsy/ucloud-storage
118
83
  licenses: []
119
84
  post_install_message:
@@ -134,16 +99,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
99
  version: '0'
135
100
  requirements: []
136
101
  rubyforge_project: ucloudstorage
137
- rubygems_version: 1.8.24
102
+ rubygems_version: 1.8.5
138
103
  signing_key:
139
104
  specification_version: 3
140
105
  summary: simple API for authorize, upload files
141
106
  test_files:
142
- - !binary |-
143
- c3BlYy9maXh0dXJlcy9zYW1wbGVfZmlsZS50eHQ=
144
- - !binary |-
145
- c3BlYy9zdXBwb3J0L2F1dGhfaW5mby5zYW1wbGUueW1s
146
- - !binary |-
147
- c3BlYy9zdXBwb3J0L3Zjci5yYg==
148
- - !binary |-
149
- c3BlYy91Y2xvdWRfc3RvcmFnZV9zcGVjLnJi
107
+ - spec/fixtures/sample_file.txt
108
+ - spec/support/auth_info.sample.yml
109
+ - spec/support/vcr.rb
110
+ - spec/ucloud_storage_spec.rb
data/Gemfile.lock DELETED
@@ -1,38 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- ucloud_storage (0.0.7)
5
- httparty
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- addressable (2.3.4)
11
- crack (0.3.2)
12
- diff-lcs (1.2.4)
13
- httparty (0.11.0)
14
- multi_json (~> 1.0)
15
- multi_xml (>= 0.5.2)
16
- multi_json (1.7.2)
17
- multi_xml (0.5.3)
18
- rspec (2.13.0)
19
- rspec-core (~> 2.13.0)
20
- rspec-expectations (~> 2.13.0)
21
- rspec-mocks (~> 2.13.0)
22
- rspec-core (2.13.1)
23
- rspec-expectations (2.13.0)
24
- diff-lcs (>= 1.1.3, < 2.0)
25
- rspec-mocks (2.13.1)
26
- vcr (2.4.0)
27
- webmock (1.11.0)
28
- addressable (>= 2.2.7)
29
- crack (>= 0.3.2)
30
-
31
- PLATFORMS
32
- ruby
33
-
34
- DEPENDENCIES
35
- rspec
36
- ucloud_storage!
37
- vcr
38
- webmock