ucloud_storage 0.0.10 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -2
- data/CHANGELOG +4 -0
- data/README.md +9 -5
- data/lib/ucloud_storage/ucloud_storage.rb +62 -5
- data/lib/ucloud_storage/version.rb +1 -1
- data/spec/ucloud_storage_spec.rb +21 -0
- metadata +10 -10
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -18,11 +18,15 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
ucloud.
|
21
|
+
ucloud = UcloudStorage.new(user: 'email', pass: 'API_KEY')
|
22
|
+
|
23
|
+
ucloud.authoize
|
24
|
+
# Upload
|
25
|
+
ucloud.upload(filepath, boxname, destination)
|
26
|
+
# Delete
|
27
|
+
ucloud.delete(boxname, destination)
|
28
|
+
# Get
|
29
|
+
ucloud.get(boxname, destination)
|
26
30
|
|
27
31
|
## Configuration
|
28
32
|
|
@@ -11,6 +11,7 @@ module UcloudStorage
|
|
11
11
|
def initialize(options={})
|
12
12
|
@user = options.fetch(:user) { Configuration.user }
|
13
13
|
@pass = options.fetch(:pass) { Configuration.pass }
|
14
|
+
@authorized = false
|
14
15
|
end
|
15
16
|
|
16
17
|
def authorize
|
@@ -24,27 +25,36 @@ module UcloudStorage
|
|
24
25
|
when 200
|
25
26
|
self.storage_url = response.headers["X-Storage-Url"]
|
26
27
|
self.auth_token = response.headers["X-Auth-Token"]
|
27
|
-
true
|
28
|
+
@authorized = true
|
28
29
|
when 401 then false
|
29
30
|
else raise TotalyWrongException
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
34
|
+
def is_authorized?
|
35
|
+
@authorized
|
36
|
+
end
|
37
|
+
|
33
38
|
def upload(file_path, box_name, destination, &block)
|
34
39
|
raise NotAuthorized if storage_url.nil?
|
35
40
|
|
36
41
|
file = File.new(file_path)
|
37
|
-
content_type =
|
42
|
+
content_type = get_image_extension(file_path)
|
43
|
+
upload_blob(file.read, box_name, destination, content_type, &block)
|
44
|
+
end
|
45
|
+
|
46
|
+
def upload_blob(blob, box_name, destination, content_type, &block)
|
47
|
+
raise NotAuthorized if storage_url.nil?
|
38
48
|
|
39
49
|
response = HTTParty.put(storage_url+ "/#{box_name}/#{destination}",
|
40
50
|
headers: {
|
41
51
|
"X-Auth-Token" => auth_token,
|
42
52
|
"Content-Type" => content_type,
|
43
|
-
"Content-Length" =>
|
44
|
-
body:
|
53
|
+
"Content-Length" => blob.size.to_s },
|
54
|
+
body: blob)
|
45
55
|
|
46
56
|
if response.code == 401 and authorize
|
47
|
-
return
|
57
|
+
return upload_blob(blob, box_name, destination, content_type, &block)
|
48
58
|
end
|
49
59
|
|
50
60
|
yield response if block_given?
|
@@ -62,5 +72,52 @@ module UcloudStorage
|
|
62
72
|
|
63
73
|
response.code == 204 ? true : false
|
64
74
|
end
|
75
|
+
|
76
|
+
def get(box_name, destination)
|
77
|
+
raise NotAuthorized if storage_url.nil?
|
78
|
+
|
79
|
+
response = HTTParty.get(storage_url+ "/#{box_name}/#{destination}",
|
80
|
+
headers: { "X-Auth-Token" => auth_token })
|
81
|
+
|
82
|
+
yield response if block_given?
|
83
|
+
|
84
|
+
[200, 304].include?(response.code) ? true : false
|
85
|
+
end
|
86
|
+
|
87
|
+
def exist?(box_name, destination)
|
88
|
+
raise NotAuthorized if storage_url.nil?
|
89
|
+
|
90
|
+
response = HTTParty.head(storage_url+ "/#{box_name}/#{destination}",
|
91
|
+
headers: { "X-Auth-Token" => auth_token })
|
92
|
+
|
93
|
+
[200, 204].include?(response.code) ? true : false # Adding 200 for Ucloud's way
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
# stolen from http://stackoverflow.com/a/16636012/1802026
|
101
|
+
def get_image_extension(local_file_path)
|
102
|
+
png = Regexp.new("\x89PNG".force_encoding("binary"))
|
103
|
+
jpg = Regexp.new("\xff\xd8\xff\xe0\x00\x10JFIF".force_encoding("binary"))
|
104
|
+
jpg2 = Regexp.new("\xff\xd8\xff\xe1(.*){2}Exif".force_encoding("binary"))
|
105
|
+
case IO.read(local_file_path, 10)
|
106
|
+
when /^GIF8/
|
107
|
+
'gif'
|
108
|
+
when /^#{png}/
|
109
|
+
'png'
|
110
|
+
when /^#{jpg}/
|
111
|
+
'jpg'
|
112
|
+
when /^#{jpg2}/
|
113
|
+
'jpg'
|
114
|
+
else
|
115
|
+
nil
|
116
|
+
# mime_type = `file #{local_file_path} --mime-type`.gsub("\n", '') # Works on linux and mac
|
117
|
+
# raise UnprocessableEntity, "unknown file type" if !mime_type
|
118
|
+
# mime_type.split(':')[1].split('/')[1].gsub('x-', '').gsub(/jpeg/, 'jpg').gsub(/text/, 'txt').gsub(/x-/, '')
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
65
122
|
end
|
66
123
|
end
|
data/spec/ucloud_storage_spec.rb
CHANGED
@@ -43,9 +43,11 @@ describe UcloudStorage do
|
|
43
43
|
describe '#authorize' do
|
44
44
|
it "can authorize with valid user/pass" do
|
45
45
|
VCR.use_cassette("storage/v1/auth") do
|
46
|
+
valid_ucloud.is_authorized?.should_not == true
|
46
47
|
valid_ucloud.authorize.should == true
|
47
48
|
valid_ucloud.storage_url.should_not be_nil
|
48
49
|
valid_ucloud.auth_token.should_not be_nil
|
50
|
+
valid_ucloud.is_authorized?.should == true
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
@@ -157,4 +159,23 @@ describe UcloudStorage do
|
|
157
159
|
end
|
158
160
|
end
|
159
161
|
end
|
162
|
+
|
163
|
+
describe "#exist" do
|
164
|
+
it 'should get updated object' do
|
165
|
+
valid_ucloud.authorize
|
166
|
+
file_path = File.join(File.dirname(__FILE__), "/fixtures/sample_file.txt")
|
167
|
+
box = 'dev_box'
|
168
|
+
destination = 'cropped_images/'+Pathname(file_path).basename.to_s
|
169
|
+
|
170
|
+
VCR.use_cassette("v1/put_storage_object_02") do
|
171
|
+
valid_ucloud.upload(file_path, box, destination)
|
172
|
+
end
|
173
|
+
|
174
|
+
VCR.use_cassette("v1/get_storage_object") do
|
175
|
+
valid_ucloud.get(box, destination) do |response|
|
176
|
+
[200, 304].should include(response.code)
|
177
|
+
end.should == true
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
160
181
|
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.
|
4
|
+
version: 0.0.12
|
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-
|
13
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
17
|
-
requirement: &
|
17
|
+
requirement: &70357224523380 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70357224523380
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: vcr
|
28
|
-
requirement: &
|
28
|
+
requirement: &70357224522960 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70357224522960
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: webmock
|
39
|
-
requirement: &
|
39
|
+
requirement: &70357224522540 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70357224522540
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: httparty
|
50
|
-
requirement: &
|
50
|
+
requirement: &70357224538500 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,7 +55,7 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70357224538500
|
59
59
|
description: ucloud storage API
|
60
60
|
email:
|
61
61
|
- wangsy@wangsy.com
|