kloudless 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/Rakefile +4 -0
- data/kloudless.gemspec +6 -5
- data/lib/kloudless.rb +5 -6
- data/lib/kloudless/account.rb +5 -5
- data/lib/kloudless/error.rb +2 -3
- data/lib/kloudless/file.rb +27 -14
- data/lib/kloudless/folder.rb +9 -9
- data/lib/kloudless/http.rb +31 -40
- data/lib/kloudless/link.rb +7 -7
- data/lib/kloudless/multipart_upload.rb +11 -8
- data/lib/kloudless/version.rb +1 -1
- data/test/kloudless/account_test.rb +3 -3
- data/test/kloudless/file_test.rb +22 -6
- data/test/kloudless/folder_test.rb +5 -5
- data/test/kloudless/link_test.rb +3 -3
- data/test/kloudless/multipart_upload_test.rb +11 -6
- data/test/kloudless_test.rb +3 -3
- metadata +19 -21
- data/lib/kloudless/account_key.rb +0 -26
- data/test/kloudless/account_key_test.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87e04e539ed7a1b806e462f1e156ad3fa60241d4
|
4
|
+
data.tar.gz: 5d2b394818e6db3824ef1287b39bcad1284081ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66a884a58eb3ccb6722facf07cb3096b4379c02e857c79693193dc0faf5d80783aa7b950e545316bed6e80d317ce518e68988fb6e9cd016f7567a0a82b6903b8
|
7
|
+
data.tar.gz: 3d42f44a173284b6204333bf1a47dc060d33c8b53d8da17aeb8a96fc5725e6a88bb30e79bf0ddf466ab0f143b079d13055d1fd51e9de6caa55283e9227b98151
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# upcoming
|
2
|
+
|
3
|
+
# 0.2.0
|
4
|
+
|
5
|
+
- Query parameters for POST/PUT/PATCH requests.
|
6
|
+
- Bearer Tokens instead of Account Keys.
|
7
|
+
- Better/fixed file upload and download methods.
|
8
|
+
- Fixed gemspec warnings
|
9
|
+
- Fixed gemspec homepage. @tyrust
|
10
|
+
|
11
|
+
# 0.1.0
|
12
|
+
|
13
|
+
Initial release
|
data/Rakefile
CHANGED
data/kloudless.gemspec
CHANGED
@@ -8,8 +8,9 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Kloudless::VERSION
|
9
9
|
spec.authors = ["Jerry Cheung"]
|
10
10
|
spec.email = ["jollyjerry@gmail.com"]
|
11
|
-
spec.summary = %q{Kloudless API client}
|
12
|
-
spec.
|
11
|
+
spec.summary = %q{Ruby Kloudless API client. The last cloud storage API you’ll ever need.}
|
12
|
+
spec.description = %q{Ruby Kloudless API client}
|
13
|
+
spec.homepage = "https://github.com/jch/kloudless-ruby"
|
13
14
|
spec.license = "MIT"
|
14
15
|
spec.required_ruby_version = ">= 2.1"
|
15
16
|
|
@@ -19,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
19
20
|
spec.require_paths = ["lib"]
|
20
21
|
|
21
22
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
-
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "byebug"
|
24
|
-
spec.add_development_dependency "minitest"
|
23
|
+
spec.add_development_dependency "rake", "~> 10"
|
24
|
+
spec.add_development_dependency "byebug", "~> 3"
|
25
|
+
spec.add_development_dependency "minitest", "~> 5"
|
25
26
|
end
|
data/lib/kloudless.rb
CHANGED
@@ -3,7 +3,6 @@ require_relative "kloudless/error"
|
|
3
3
|
require_relative "kloudless/http"
|
4
4
|
require_relative "kloudless/model"
|
5
5
|
require_relative "kloudless/account"
|
6
|
-
require_relative "kloudless/account_key"
|
7
6
|
require_relative "kloudless/team"
|
8
7
|
require_relative "kloudless/file"
|
9
8
|
require_relative "kloudless/multipart_upload"
|
@@ -18,20 +17,20 @@ module Kloudless
|
|
18
17
|
API_VERSION = "v0".freeze
|
19
18
|
API_URL = "https://api.kloudless.com/#{API_VERSION}".freeze
|
20
19
|
|
21
|
-
# Public: Authorize with API Key or
|
20
|
+
# Public: Authorize with API Key or Bearer Token. Returns nothing.
|
22
21
|
#
|
23
22
|
# Options:
|
24
23
|
# :api_key
|
25
|
-
# :
|
24
|
+
# :token
|
26
25
|
#
|
27
26
|
# https://developers.kloudless.com/docs#authorization
|
28
27
|
def self.authorize(options = {})
|
29
28
|
Kloudless::HTTP.headers["Authorization"] = if options[:api_key]
|
30
29
|
"ApiKey #{options[:api_key]}"
|
31
|
-
elsif options[:
|
32
|
-
"
|
30
|
+
elsif options[:token]
|
31
|
+
"Bearer #{options[:token]}"
|
33
32
|
else
|
34
|
-
raise ArgumentError.new(":api_key or :
|
33
|
+
raise ArgumentError.new(":api_key or :token required")
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
data/lib/kloudless/account.rb
CHANGED
@@ -5,7 +5,7 @@ module Kloudless
|
|
5
5
|
# https://developers.kloudless.com/docs#accounts
|
6
6
|
class Account < Model
|
7
7
|
# Public: Returns Kloudless::Collection. Raises Kloudless::Error.
|
8
|
-
def self.list(params
|
8
|
+
def self.list(**params)
|
9
9
|
Kloudless::Collection.new(self, http.get("/accounts", params: params))
|
10
10
|
end
|
11
11
|
|
@@ -13,8 +13,8 @@ module Kloudless
|
|
13
13
|
new(http.get("/accounts/#{account_id}", params: params))
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.update(account_id:, **
|
17
|
-
new(http.patch("/accounts/#{account_id}", params: params))
|
16
|
+
def self.update(account_id:, params: {}, **data)
|
17
|
+
new(http.patch("/accounts/#{account_id}", params: params, data: data))
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.delete(account_id:)
|
@@ -22,8 +22,8 @@ module Kloudless
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# Public: TODO: Returns ???. Raises Kloudless::Error.
|
25
|
-
def self.import(params
|
26
|
-
http.post("/accounts", params: params)
|
25
|
+
def self.import(params: {}, **data)
|
26
|
+
http.post("/accounts", params: params, data: data)
|
27
27
|
end
|
28
28
|
|
29
29
|
class << self
|
data/lib/kloudless/error.rb
CHANGED
@@ -153,8 +153,6 @@ module Kloudless
|
|
153
153
|
forbidden: ForbiddenError,
|
154
154
|
service_forbidden: ServiceForbiddenError,
|
155
155
|
not_found: NotFoundError,
|
156
|
-
method_not_allowed: MethodNotAllowedError,
|
157
|
-
not_acceptable: NotAcceptableError,
|
158
156
|
naming_conflict: NamingConflictError,
|
159
157
|
too_many_requests: TooManyRequestsError,
|
160
158
|
too_many_service_requests: TooManyServiceRequestsError,
|
@@ -167,6 +165,7 @@ module Kloudless
|
|
167
165
|
bad_gateway: BadGatewayError,
|
168
166
|
service_not_available: ServiceNotAvailableError,
|
169
167
|
gateway_timeout: GatewayTimeoutError,
|
170
|
-
insufficient_storage: InsufficientStorageError
|
168
|
+
insufficient_storage: InsufficientStorageError
|
169
|
+
}
|
171
170
|
end
|
172
171
|
end
|
data/lib/kloudless/file.rb
CHANGED
@@ -1,35 +1,48 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module Kloudless
|
2
4
|
# https://developers.kloudless.com/docs#files
|
3
5
|
class File < Model
|
4
|
-
def self.upload(account_id:, **params)
|
6
|
+
def self.upload(account_id:, data:, parent_id:, file_name:, **params)
|
7
|
+
headers = {
|
8
|
+
'X-Kloudless-Metadata' => {parent_id: parent_id, name: file_name}.to_json,
|
9
|
+
'Content-Type' => 'application/octet-stream'
|
10
|
+
}
|
5
11
|
path = "/accounts/#{account_id}/files"
|
6
|
-
new(http.post(path, params: params
|
12
|
+
new(http.post(path, params: params, data: data, headers: headers,
|
13
|
+
parse_request: false))
|
7
14
|
end
|
8
15
|
|
9
|
-
def self.
|
16
|
+
def self.upload_from_url(account_id:, params: {}, **data)
|
17
|
+
path = "/accounts/#{account_id}/files"
|
18
|
+
new(http.post(path, params: params, data: data))
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.metadata(account_id:, file_id:, **params)
|
10
22
|
path = "/accounts/#{account_id}/files/#{file_id}"
|
11
|
-
new(http.get(path))
|
23
|
+
new(http.get(path, params: params))
|
12
24
|
end
|
13
25
|
|
14
|
-
def self.rename(account_id:, file_id:, **
|
26
|
+
def self.rename(account_id:, file_id:, params: {}, **data)
|
15
27
|
path = "/accounts/#{account_id}/files/#{file_id}"
|
16
|
-
new(http.patch(path, params: params))
|
28
|
+
new(http.patch(path, params: params, data: data))
|
17
29
|
end
|
18
30
|
|
19
|
-
|
20
|
-
|
21
|
-
|
31
|
+
def self.update(account_id:, file_id:, data:)
|
32
|
+
path = "/accounts/#{account_id}/files/#{file_id}"
|
33
|
+
new(http.put(path, data: data, parse_request: false,
|
34
|
+
headers: {'Content-Type' => 'application/octet-stream'}))
|
22
35
|
end
|
23
36
|
|
24
|
-
def self.download(account_id:, file_id
|
37
|
+
def self.download(account_id:, file_id:, **params)
|
25
38
|
path = "/accounts/#{account_id}/files/#{file_id}/contents"
|
26
|
-
http.
|
39
|
+
http.get(path, params: params, parse_response: false)
|
27
40
|
end
|
28
41
|
|
29
|
-
def self.copy(account_id:, file_id:, parent_id:, **
|
42
|
+
def self.copy(account_id:, file_id:, parent_id:, params: {}, **data)
|
30
43
|
path = "/accounts/#{account_id}/files/#{file_id}/copy"
|
31
|
-
|
32
|
-
new(http.post(path, params: params))
|
44
|
+
data[:parent_id] = parent_id
|
45
|
+
new(http.post(path, params: params, data: data))
|
33
46
|
end
|
34
47
|
|
35
48
|
def self.delete(account_id:, file_id:, **params)
|
data/lib/kloudless/folder.rb
CHANGED
@@ -2,15 +2,15 @@ module Kloudless
|
|
2
2
|
# https://developers.kloudless.com/docs#folders
|
3
3
|
class Folder < Model
|
4
4
|
# https://developers.kloudless.com/docs#folders-create-a-folder
|
5
|
-
def self.create(account_id:, **
|
5
|
+
def self.create(account_id:, params: {}, **data)
|
6
6
|
path = "/accounts/#{account_id}/folders"
|
7
|
-
new(http.post(path, params: params))
|
7
|
+
new(http.post(path, params: params, data: data))
|
8
8
|
end
|
9
9
|
|
10
10
|
# https://developers.kloudless.com/docs#folders-retrieve-folder-metadata
|
11
|
-
def self.metadata(account_id:, folder_id
|
11
|
+
def self.metadata(account_id:, folder_id:, **params)
|
12
12
|
path = "/accounts/#{account_id}/folders/#{folder_id}"
|
13
|
-
new(http.get(path))
|
13
|
+
new(http.get(path, params: params))
|
14
14
|
end
|
15
15
|
|
16
16
|
# https://developers.kloudless.com/docs#folders-retrieve-folder-contents
|
@@ -20,16 +20,16 @@ module Kloudless
|
|
20
20
|
end
|
21
21
|
|
22
22
|
# https://developers.kloudless.com/docs#folders-rename/move-a-folder
|
23
|
-
def self.rename(account_id:, folder_id:, **
|
23
|
+
def self.rename(account_id:, folder_id:, params: {}, **data)
|
24
24
|
path = "/accounts/#{account_id}/folders/#{folder_id}"
|
25
|
-
new(http.patch(path, params: params))
|
25
|
+
new(http.patch(path, params: params, data: data))
|
26
26
|
end
|
27
27
|
|
28
28
|
# https://developers.kloudless.com/docs#folders-copy-a-folder
|
29
|
-
def self.copy(account_id:, folder_id:, parent_id:, **
|
30
|
-
params[:parent_id] = parent_id
|
29
|
+
def self.copy(account_id:, folder_id:, parent_id:, params: {}, **data)
|
31
30
|
path = "/accounts/#{account_id}/folders/#{folder_id}/copy"
|
32
|
-
|
31
|
+
data[:parent_id] = parent_id
|
32
|
+
new(http.post(path, params: params, data: data))
|
33
33
|
end
|
34
34
|
|
35
35
|
# https://developers.kloudless.com/docs#folders-delete-a-folder
|
data/lib/kloudless/http.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "net/http"
|
2
|
+
require "json"
|
2
3
|
|
3
4
|
module Kloudless
|
4
5
|
# Net::HTTP wrapper
|
@@ -8,60 +9,50 @@ module Kloudless
|
|
8
9
|
@headers ||= {}
|
9
10
|
end
|
10
11
|
|
11
|
-
def self.
|
12
|
+
def self.request(method, path, params: {}, data: {}, headers: {},
|
13
|
+
parse_request: true, parse_response: true)
|
12
14
|
uri = URI.parse(Kloudless::API_URL + path)
|
13
15
|
uri.query = URI.encode_www_form(params) if !params.empty?
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
execute(request)
|
19
|
-
end
|
17
|
+
if ['post', 'put', 'patch'].member?(method)
|
18
|
+
headers["Content-Type"] ||= "application/json"
|
19
|
+
end
|
20
20
|
|
21
|
-
|
22
|
-
# request object, defaults to json parsing, but allow the option for raw
|
23
|
-
def self.get_raw(path)
|
24
|
-
uri = URI.parse(Kloudless::API_URL + path)
|
25
|
-
request = Net::HTTP::Get.new(uri)
|
21
|
+
request = Net::HTTP.const_get(method.capitalize).new(uri)
|
26
22
|
request.initialize_http_header(headers)
|
27
23
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
def self.post(path, params: {}, headers: {})
|
33
|
-
uri = URI.parse(Kloudless::API_URL + path)
|
34
|
-
headers["Content-Type"] = "application/json"
|
35
|
-
|
36
|
-
request = Net::HTTP::Post.new(uri)
|
37
|
-
request.initialize_http_header(headers)
|
38
|
-
request.set_form_data(params) if !params.empty?
|
24
|
+
if !data.empty?
|
25
|
+
data = data.to_json if parse_request
|
26
|
+
request.body = data
|
27
|
+
end
|
39
28
|
|
40
|
-
execute(request)
|
29
|
+
execute(request, parse_response: parse_response)
|
41
30
|
end
|
42
31
|
|
43
|
-
def self.
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
request = Net::HTTP::Post.new(uri)
|
48
|
-
request.initialize_http_header(headers)
|
49
|
-
request.set_form_data(params) if !params.empty?
|
32
|
+
def self.get(path, **kwargs)
|
33
|
+
self.request('get', path, **kwargs)
|
34
|
+
end
|
50
35
|
|
51
|
-
|
36
|
+
def self.post(path, params: {}, data: {}, headers: {}, **kwargs)
|
37
|
+
self.request('post', path, params: params, data: data,
|
38
|
+
headers: headers, **kwargs)
|
52
39
|
end
|
53
40
|
|
54
|
-
def self.
|
55
|
-
|
56
|
-
|
41
|
+
def self.put(path, params: {}, data: {}, headers: {}, **kwargs)
|
42
|
+
self.request('put', path, params: params, data: data,
|
43
|
+
headers: headers, **kwargs)
|
44
|
+
end
|
57
45
|
|
58
|
-
|
59
|
-
request
|
46
|
+
def self.patch(path, params: {}, data: {}, headers: {}, **kwargs)
|
47
|
+
self.request('patch', path, params: params, data: data,
|
48
|
+
headers: headers, **kwargs)
|
49
|
+
end
|
60
50
|
|
61
|
-
|
51
|
+
def self.delete(path, params: {}, headers: {}, **kwargs)
|
52
|
+
self.request('delete', path, params: params, headers: headers, **kwargs)
|
62
53
|
end
|
63
54
|
|
64
|
-
def self.execute(request,
|
55
|
+
def self.execute(request, parse_response: true)
|
65
56
|
uri = request.uri
|
66
57
|
@last_request = request
|
67
58
|
headers.each {|k,v| request[k] = v}
|
@@ -70,12 +61,12 @@ module Kloudless
|
|
70
61
|
http.request(request)
|
71
62
|
}
|
72
63
|
|
73
|
-
if
|
64
|
+
if parse_response
|
74
65
|
json = JSON.parse(response.body)
|
75
66
|
raise Kloudless::Error.from_json(json) if json["error_code"]
|
76
67
|
json
|
77
68
|
else
|
78
|
-
response
|
69
|
+
response.body
|
79
70
|
end
|
80
71
|
end
|
81
72
|
|
data/lib/kloudless/link.rb
CHANGED
@@ -7,10 +7,10 @@ module Kloudless
|
|
7
7
|
end
|
8
8
|
|
9
9
|
# https://developers.kloudless.com/docs#links-create-a-link
|
10
|
-
def self.create(account_id:, file_id:, **
|
11
|
-
|
10
|
+
def self.create(account_id:, file_id:, params: {}, **data)
|
11
|
+
data[:file_id] = file_id
|
12
12
|
path = "/accounts/#{account_id}/links"
|
13
|
-
new(http.post(path, params: params))
|
13
|
+
new(http.post(path, params: params, data: data))
|
14
14
|
end
|
15
15
|
|
16
16
|
# https://developers.kloudless.com/docs#links-retrieve-a-link
|
@@ -20,15 +20,15 @@ module Kloudless
|
|
20
20
|
end
|
21
21
|
|
22
22
|
# https://developers.kloudless.com/docs#links-update-a-link
|
23
|
-
def self.update(account_id:, link_id:, **
|
23
|
+
def self.update(account_id:, link_id:, params: {}, **data)
|
24
24
|
path = "/accounts/#{account_id}/links/#{link_id}"
|
25
|
-
new(http.patch(path, params: params))
|
25
|
+
new(http.patch(path, params: params, data: data))
|
26
26
|
end
|
27
27
|
|
28
28
|
# https://developers.kloudless.com/docs#links-delete-a-link
|
29
|
-
def self.delete(account_id:, link_id
|
29
|
+
def self.delete(account_id:, link_id:, **params)
|
30
30
|
path = "/accounts/#{account_id}/links/#{link_id}"
|
31
|
-
new(http.delete(path))
|
31
|
+
new(http.delete(path, params: params))
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Kloudless
|
2
2
|
# https://developers.kloudless.com/docs#multipart-upload
|
3
3
|
class MultipartUpload < Model
|
4
|
-
def self.init(account_id:, **
|
4
|
+
def self.init(account_id:, params: {}, **data)
|
5
5
|
path = "/accounts/#{account_id}/multipart"
|
6
|
-
new(http.post(path, params: params))
|
6
|
+
new(http.post(path, params: params, data: data))
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.retrieve(account_id:, multipart_id:)
|
@@ -12,25 +12,28 @@ module Kloudless
|
|
12
12
|
end
|
13
13
|
|
14
14
|
# https://developers.kloudless.com/docs#multipart-upload-upload-part
|
15
|
-
def self.upload(account_id:, multipart_id:, part_number:, **params)
|
15
|
+
def self.upload(account_id:, multipart_id:, data:, part_number:, **params)
|
16
16
|
path = "/accounts/#{account_id}/multipart/#{multipart_id}"
|
17
17
|
params[:part_number] = part_number
|
18
|
-
|
18
|
+
headers = {'Content-Type' => 'application/octet-stream'}
|
19
|
+
new(http.put(path, params: params, data: data, headers: headers,
|
20
|
+
parse_request: false))
|
19
21
|
end
|
20
22
|
|
21
23
|
# https://developers.kloudless.com/docs#multipart-upload-finalize-multipart-session
|
22
|
-
def self.finalize(account_id:, multipart_id:)
|
24
|
+
def self.finalize(account_id:, multipart_id:, params: {}, **data)
|
23
25
|
path = "/accounts/#{account_id}/multipart/#{multipart_id}/complete"
|
24
|
-
new(http.post(path))
|
26
|
+
new(http.post(path, params: params, data: data))
|
25
27
|
end
|
26
28
|
|
27
29
|
# https://developers.kloudless.com/docs#multipart-upload-abort-multipart-session
|
28
|
-
def self.abort(account_id:, multipart_id
|
30
|
+
def self.abort(account_id:, multipart_id:, **params)
|
29
31
|
path = "/accounts/#{account_id}/multipart/#{multipart_id}"
|
30
|
-
new(http.delete(path))
|
32
|
+
new(http.delete(path, params: params))
|
31
33
|
end
|
32
34
|
|
33
35
|
class << self
|
36
|
+
alias_method :create, :init
|
34
37
|
alias_method :delete, :abort
|
35
38
|
end
|
36
39
|
end
|
data/lib/kloudless/version.rb
CHANGED
@@ -50,8 +50,8 @@ class Kloudless::AccountTest < Minitest::Test
|
|
50
50
|
token: "foo",
|
51
51
|
token_secret: "bar"
|
52
52
|
}
|
53
|
-
Kloudless.http.expect(:post, args: ["/accounts", {params: attributes}]) do
|
54
|
-
Kloudless::Account.import(attributes)
|
53
|
+
Kloudless.http.expect(:post, args: ["/accounts", {params: {}, data: attributes}]) do
|
54
|
+
Kloudless::Account.import(**attributes)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -63,7 +63,7 @@ class Kloudless::AccountTest < Minitest::Test
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def test_update_account
|
66
|
-
Kloudless.http.expect(:patch, args: ["/accounts/1", {params: {active: true}}]) do
|
66
|
+
Kloudless.http.expect(:patch, args: ["/accounts/1", {params: {}, data: {active: true}}]) do
|
67
67
|
account = Kloudless::Account.update(account_id: 1, active: true)
|
68
68
|
assert_kind_of Kloudless::Account, account
|
69
69
|
end
|
data/test/kloudless/file_test.rb
CHANGED
@@ -2,35 +2,51 @@ require_relative "../test_helper"
|
|
2
2
|
|
3
3
|
class Kloudless::FileTest < Minitest::Test
|
4
4
|
def test_upload_file
|
5
|
-
|
6
|
-
|
5
|
+
metadata = {parent_id: "parent", name: "foo.txt"}
|
6
|
+
Kloudless.http.expect(:post, returns: {"id" => "foo"}, args: [
|
7
|
+
"/accounts/1/files", data: "FILE CONTENTS",
|
8
|
+
headers: {'X-Kloudless-Metadata' => metadata.to_json,
|
9
|
+
"Content-Type" => 'application/octet-stream'},
|
10
|
+
params: {}, parse_request: false]) do
|
11
|
+
file = Kloudless::File.upload(account_id: 1, data: "FILE CONTENTS",
|
12
|
+
parent_id: metadata[:parent_id],
|
13
|
+
file_name: metadata[:name])
|
7
14
|
assert_kind_of Kloudless::File, file
|
8
15
|
end
|
9
16
|
end
|
10
17
|
|
11
18
|
def test_retrieve_file_metadata
|
12
|
-
Kloudless.http.expect(:get, returns: {"id" => "foo"}, args:["/accounts/1/files/2"]) do
|
19
|
+
Kloudless.http.expect(:get, returns: {"id" => "foo"}, args:["/accounts/1/files/2", params: {}]) do
|
13
20
|
metadata = Kloudless::File.metadata(account_id: 1, file_id: 2)
|
14
21
|
assert_kind_of Kloudless::File, metadata # TODO: not really a type
|
15
22
|
end
|
16
23
|
end
|
17
24
|
|
18
25
|
def test_rename_file
|
19
|
-
Kloudless.http.expect(:patch, returns: {"id" => "foo"}, args:["/accounts/1/files/2", params: {name: "new-name.txt"}]) do
|
26
|
+
Kloudless.http.expect(:patch, returns: {"id" => "foo"}, args:["/accounts/1/files/2", params: {}, data: {name: "new-name.txt"}]) do
|
20
27
|
file = Kloudless::File.rename(account_id: 1, file_id: 2, name: "new-name.txt")
|
21
28
|
assert_kind_of Kloudless::File, file
|
22
29
|
end
|
23
30
|
end
|
24
31
|
|
32
|
+
def test_update
|
33
|
+
Kloudless.http.expect(:put, returns: {"id" => "foo"}, args: [
|
34
|
+
"/accounts/1/files/2", data: "FILE CONTENTS", parse_request: false,
|
35
|
+
headers: {'Content-Type' => 'application/octet-stream'}]) do
|
36
|
+
file = Kloudless::File.update(account_id: 1, file_id: 2, data: "FILE CONTENTS")
|
37
|
+
assert_kind_of Kloudless::File, file
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
25
41
|
def test_download
|
26
|
-
Kloudless.http.expect(:
|
42
|
+
Kloudless.http.expect(:get, returns: "FILE CONTENTS", args:["/accounts/1/files/2/contents", params: {}, parse_response: false]) do
|
27
43
|
contents = Kloudless::File.download(account_id: 1, file_id: 2)
|
28
44
|
assert_equal "FILE CONTENTS", contents
|
29
45
|
end
|
30
46
|
end
|
31
47
|
|
32
48
|
def test_copy
|
33
|
-
Kloudless.http.expect(:post, returns: {"id" => "foo"}, args:["/accounts/1/files/2/copy", params: {parent_id: "parent-id"}]) do
|
49
|
+
Kloudless.http.expect(:post, returns: {"id" => "foo"}, args:["/accounts/1/files/2/copy", params: {}, data: {parent_id: "parent-id"}]) do
|
34
50
|
file = Kloudless::File.copy(account_id: 1, file_id: 2, parent_id: "parent-id")
|
35
51
|
assert_kind_of Kloudless::File, file
|
36
52
|
end
|
@@ -2,14 +2,14 @@ require_relative "../test_helper"
|
|
2
2
|
|
3
3
|
class Kloudless::FolderTest < Minitest::Test
|
4
4
|
def test_create
|
5
|
-
Kloudless.http.expect(:post, args: ["/accounts/1/folders", params: {}]) do
|
6
|
-
folder = Kloudless::Folder.create(account_id: 1)
|
5
|
+
Kloudless.http.expect(:post, args: ["/accounts/1/folders", params: {}, data: {name: "foo"}]) do
|
6
|
+
folder = Kloudless::Folder.create(account_id: 1, name: "foo")
|
7
7
|
assert_kind_of Kloudless::Folder, folder
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_metadata
|
12
|
-
Kloudless.http.expect(:get, args: ["/accounts/1/folders/2"]) do
|
12
|
+
Kloudless.http.expect(:get, args: ["/accounts/1/folders/2", params: {}]) do
|
13
13
|
folder = Kloudless::Folder.metadata(account_id: 1, folder_id: 2)
|
14
14
|
assert_kind_of Kloudless::Folder, folder
|
15
15
|
end
|
@@ -25,14 +25,14 @@ class Kloudless::FolderTest < Minitest::Test
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_rename
|
28
|
-
Kloudless.http.expect(:patch, args: ["/accounts/1/folders/2", params: {name: "foo.md"}]) do
|
28
|
+
Kloudless.http.expect(:patch, args: ["/accounts/1/folders/2", params: {}, data: {name: "foo.md"}]) do
|
29
29
|
folder = Kloudless::Folder.rename(account_id: 1, folder_id: 2, name: "foo.md")
|
30
30
|
assert_kind_of Kloudless::Folder, folder
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_copy
|
35
|
-
Kloudless.http.expect(:post, args: ["/accounts/1/folders/2/copy", params: {parent_id: "parent-id"}]) do
|
35
|
+
Kloudless.http.expect(:post, args: ["/accounts/1/folders/2/copy", params: {}, data: {parent_id: "parent-id"}]) do
|
36
36
|
folder = Kloudless::Folder.copy(account_id: 1, folder_id: 2, parent_id: "parent-id")
|
37
37
|
assert_kind_of Kloudless::Folder, folder
|
38
38
|
end
|
data/test/kloudless/link_test.rb
CHANGED
@@ -11,7 +11,7 @@ class Kloudless::LinkTest < Minitest::Test
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_create_link
|
14
|
-
Kloudless.http.expect(:post, args: ["/accounts/1/links", params: {file_id: "file-id"}]) do
|
14
|
+
Kloudless.http.expect(:post, args: ["/accounts/1/links", params: {}, data: {file_id: "file-id"}]) do
|
15
15
|
link = Kloudless::Link.create(account_id: 1, file_id: "file-id")
|
16
16
|
assert_kind_of Kloudless::Link, link
|
17
17
|
end
|
@@ -25,14 +25,14 @@ class Kloudless::LinkTest < Minitest::Test
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_update_link
|
28
|
-
Kloudless.http.expect(:patch, args: ["/accounts/1/links/2", params: {password: "foo"}]) do
|
28
|
+
Kloudless.http.expect(:patch, args: ["/accounts/1/links/2", params: {}, data: {password: "foo"}]) do
|
29
29
|
link = Kloudless::Link.update(account_id: 1, link_id: 2, password: "foo")
|
30
30
|
assert_kind_of Kloudless::Link, link
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_delete_link
|
35
|
-
Kloudless.http.expect(:delete, args: ["/accounts/1/links/2"]) do
|
35
|
+
Kloudless.http.expect(:delete, args: ["/accounts/1/links/2", params: {}]) do
|
36
36
|
link = Kloudless::Link.delete(account_id: 1, link_id: 2)
|
37
37
|
assert_kind_of Kloudless::Link, link
|
38
38
|
end
|
@@ -2,8 +2,9 @@ require_relative "../test_helper"
|
|
2
2
|
|
3
3
|
class Kloudless::MultipartUploadTest < Minitest::Test
|
4
4
|
def test_init_multipart_upload
|
5
|
-
Kloudless.http.expect(:post, returns: {"id" => "foo"}, args:[
|
6
|
-
|
5
|
+
Kloudless.http.expect(:post, returns: {"id" => "foo"}, args:[
|
6
|
+
"/accounts/1/multipart", params: {overwrite: true}, data: {parent_id: "foo"}]) do
|
7
|
+
upload = Kloudless::MultipartUpload.create(account_id: 1, params: {overwrite: true}, parent_id: "foo")
|
7
8
|
assert_kind_of Kloudless::MultipartUpload, upload
|
8
9
|
end
|
9
10
|
end
|
@@ -16,21 +17,25 @@ class Kloudless::MultipartUploadTest < Minitest::Test
|
|
16
17
|
end
|
17
18
|
|
18
19
|
def test_upload_multipart_upload
|
19
|
-
Kloudless.http.expect(:put, args: ["/accounts/1/multipart/2",
|
20
|
-
|
20
|
+
Kloudless.http.expect(:put, args: ["/accounts/1/multipart/2", data: "FILE CONTENTS",
|
21
|
+
headers: {'Content-Type' => 'application/octet-stream'},
|
22
|
+
params: {part_number: 1},
|
23
|
+
parse_request: false]) do
|
24
|
+
upload = Kloudless::MultipartUpload.upload(account_id: 1, multipart_id: 2,
|
25
|
+
data: "FILE CONTENTS", part_number: 1)
|
21
26
|
assert_kind_of Kloudless::MultipartUpload, upload
|
22
27
|
end
|
23
28
|
end
|
24
29
|
|
25
30
|
def test_finalize_multipart_upload
|
26
|
-
Kloudless.http.expect(:post, args: ["/accounts/1/multipart/2/complete"]) do
|
31
|
+
Kloudless.http.expect(:post, args: ["/accounts/1/multipart/2/complete", params: {}, data: {}]) do
|
27
32
|
upload = Kloudless::MultipartUpload.finalize(account_id: 1, multipart_id: 2)
|
28
33
|
assert_kind_of Kloudless::MultipartUpload, upload
|
29
34
|
end
|
30
35
|
end
|
31
36
|
|
32
37
|
def test_abort_multipart_upload
|
33
|
-
Kloudless.http.expect(:delete, args: ["/accounts/1/multipart/2"]) do
|
38
|
+
Kloudless.http.expect(:delete, args: ["/accounts/1/multipart/2", params: {}]) do
|
34
39
|
upload = Kloudless::MultipartUpload.abort(account_id: 1, multipart_id: 2)
|
35
40
|
assert_kind_of Kloudless::MultipartUpload, upload
|
36
41
|
end
|
data/test/kloudless_test.rb
CHANGED
@@ -15,11 +15,11 @@ class KloudlessTest < Minitest::Test
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
Kloudless.authorize(
|
18
|
+
def test_authorize_bearer_token
|
19
|
+
Kloudless.authorize(token: "BEARER_TOKEN")
|
20
20
|
Kloudless.http.mock_response(Struct.new(:body).new('{}')) do
|
21
21
|
Kloudless::Account.list
|
22
|
-
assert_equal "
|
22
|
+
assert_equal "Bearer BEARER_TOKEN", Kloudless::HTTP.last_request["Authorization"]
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kloudless
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jerry Cheung
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,45 +28,45 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '10'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: byebug
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: minitest
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '5'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
69
|
-
description:
|
68
|
+
version: '5'
|
69
|
+
description: Ruby Kloudless API client
|
70
70
|
email:
|
71
71
|
- jollyjerry@gmail.com
|
72
72
|
executables: []
|
@@ -74,6 +74,7 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
|
+
- CHANGELOG.md
|
77
78
|
- Gemfile
|
78
79
|
- LICENSE.txt
|
79
80
|
- README.md
|
@@ -82,7 +83,6 @@ files:
|
|
82
83
|
- kloudless.gemspec
|
83
84
|
- lib/kloudless.rb
|
84
85
|
- lib/kloudless/account.rb
|
85
|
-
- lib/kloudless/account_key.rb
|
86
86
|
- lib/kloudless/collection.rb
|
87
87
|
- lib/kloudless/error.rb
|
88
88
|
- lib/kloudless/event.rb
|
@@ -97,7 +97,6 @@ files:
|
|
97
97
|
- script/changelog
|
98
98
|
- script/package
|
99
99
|
- script/release
|
100
|
-
- test/kloudless/account_key_test.rb
|
101
100
|
- test/kloudless/account_test.rb
|
102
101
|
- test/kloudless/collection_test.rb
|
103
102
|
- test/kloudless/error_test.rb
|
@@ -110,7 +109,7 @@ files:
|
|
110
109
|
- test/kloudless/team_test.rb
|
111
110
|
- test/kloudless_test.rb
|
112
111
|
- test/test_helper.rb
|
113
|
-
homepage: https://github.com/jch/kloudless
|
112
|
+
homepage: https://github.com/jch/kloudless-ruby
|
114
113
|
licenses:
|
115
114
|
- MIT
|
116
115
|
metadata: {}
|
@@ -130,12 +129,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
129
|
version: '0'
|
131
130
|
requirements: []
|
132
131
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.
|
132
|
+
rubygems_version: 2.4.6
|
134
133
|
signing_key:
|
135
134
|
specification_version: 4
|
136
|
-
summary: Kloudless API client
|
135
|
+
summary: Ruby Kloudless API client. The last cloud storage API you’ll ever need.
|
137
136
|
test_files:
|
138
|
-
- test/kloudless/account_key_test.rb
|
139
137
|
- test/kloudless/account_test.rb
|
140
138
|
- test/kloudless/collection_test.rb
|
141
139
|
- test/kloudless/error_test.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Kloudless
|
2
|
-
# Account Keys can be used instead of API Keys to restrict access to a
|
3
|
-
# specific account’s data. This is most useful for client-side requests.
|
4
|
-
#
|
5
|
-
# https://developers.kloudless.com/docs#account-keys
|
6
|
-
class AccountKey < Model
|
7
|
-
# Public: Returns Kloudless::Collection of AccountKey. Raises
|
8
|
-
# Kloudless::Error.
|
9
|
-
#
|
10
|
-
# :account_ids - Array of account_ids to fetch keys for
|
11
|
-
def self.list(account_ids:, **params)
|
12
|
-
path = "/accounts/#{account_ids.join(',')}/keys"
|
13
|
-
Kloudless::Collection.new(self, http.get(path, params: params))
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.retrieve(account_id:, key_id:, **params)
|
17
|
-
path = "/accounts/#{account_id}/keys/#{key_id}"
|
18
|
-
new(http.get(path, params: params))
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.delete(account_id:, key_id:)
|
22
|
-
path = "/accounts/#{account_id}/keys/#{key_id}"
|
23
|
-
new(http.delete(path))
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require_relative "../test_helper"
|
2
|
-
require 'minitest'
|
3
|
-
|
4
|
-
class Kloudless::AccountKeyTest < Minitest::Test
|
5
|
-
def test_list_account_keys
|
6
|
-
Kloudless.http.expect(:get, returns: {"objects" => [{}]}, args: ["/accounts/1,2/keys", params: {}]) do
|
7
|
-
account_keys = Kloudless::AccountKey.list(account_ids: [1,2])
|
8
|
-
assert_kind_of Kloudless::Collection, account_keys
|
9
|
-
assert_kind_of Kloudless::AccountKey, account_keys.first
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_retrieve_account_key
|
14
|
-
Kloudless.http.expect(:get, args: ["/accounts/1/keys/2", params: {}]) do
|
15
|
-
account_key = Kloudless::AccountKey.retrieve(account_id: 1, key_id: 2)
|
16
|
-
assert_kind_of Kloudless::AccountKey, account_key
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_delete_account_key
|
21
|
-
Kloudless.http.expect(:delete, args: ["/accounts/1/keys/2"]) do
|
22
|
-
account_key = Kloudless::AccountKey.delete(account_id: 1, key_id: 2)
|
23
|
-
assert_kind_of Kloudless::AccountKey, account_key
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|