kloudless 0.1.0 → 0.2.0
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.
- 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
|