dropbox_api 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +3 -0
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +118 -0
- data/Rakefile +6 -0
- data/TODO.md +8 -0
- data/api_coverage.md +107 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/dropbox_api.gemspec +30 -0
- data/lib/dropbox_api.rb +102 -0
- data/lib/dropbox_api/authenticator.rb +20 -0
- data/lib/dropbox_api/client.rb +13 -0
- data/lib/dropbox_api/connection_builder.rb +17 -0
- data/lib/dropbox_api/endpoints/base.rb +44 -0
- data/lib/dropbox_api/endpoints/content_download.rb +33 -0
- data/lib/dropbox_api/endpoints/content_upload.rb +25 -0
- data/lib/dropbox_api/endpoints/files/copy.rb +22 -0
- data/lib/dropbox_api/endpoints/files/create_folder.rb +19 -0
- data/lib/dropbox_api/endpoints/files/delete.rb +25 -0
- data/lib/dropbox_api/endpoints/files/download.rb +16 -0
- data/lib/dropbox_api/endpoints/files/get_metadata.rb +29 -0
- data/lib/dropbox_api/endpoints/files/get_preview.rb +18 -0
- data/lib/dropbox_api/endpoints/files/get_temporary_link.rb +18 -0
- data/lib/dropbox_api/endpoints/files/get_thumbnail.rb +34 -0
- data/lib/dropbox_api/endpoints/files/list_folder.rb +38 -0
- data/lib/dropbox_api/endpoints/files/list_folder_continue.rb +21 -0
- data/lib/dropbox_api/endpoints/files/list_folder_get_latest_cursor.rb +40 -0
- data/lib/dropbox_api/endpoints/files/list_folder_longpoll.rb +36 -0
- data/lib/dropbox_api/endpoints/files/list_revisions.rb +27 -0
- data/lib/dropbox_api/endpoints/files/move.rb +22 -0
- data/lib/dropbox_api/endpoints/files/restore.rb +20 -0
- data/lib/dropbox_api/endpoints/files/search.rb +44 -0
- data/lib/dropbox_api/endpoints/files/upload.rb +26 -0
- data/lib/dropbox_api/endpoints/options_validator.rb +11 -0
- data/lib/dropbox_api/endpoints/rpc.rb +18 -0
- data/lib/dropbox_api/endpoints/rpc_notify.rb +11 -0
- data/lib/dropbox_api/endpoints/sharing/add_folder_member.rb +54 -0
- data/lib/dropbox_api/endpoints/sharing/create_shared_link_with_settings.rb +23 -0
- data/lib/dropbox_api/endpoints/sharing/list_folder_members.rb +31 -0
- data/lib/dropbox_api/endpoints/sharing/list_shared_links.rb +31 -0
- data/lib/dropbox_api/endpoints/sharing/share_folder.rb +58 -0
- data/lib/dropbox_api/endpoints/users/get_account.rb +17 -0
- data/lib/dropbox_api/errors/add_folder_member_error.rb +16 -0
- data/lib/dropbox_api/errors/add_member_selector_error.rb +11 -0
- data/lib/dropbox_api/errors/already_shared_error.rb +7 -0
- data/lib/dropbox_api/errors/basic_error.rb +83 -0
- data/lib/dropbox_api/errors/create_folder_error.rb +7 -0
- data/lib/dropbox_api/errors/create_shared_link_with_settings_error.rb +11 -0
- data/lib/dropbox_api/errors/delete_error.rb +8 -0
- data/lib/dropbox_api/errors/download_error.rb +7 -0
- data/lib/dropbox_api/errors/get_account_error.rb +7 -0
- data/lib/dropbox_api/errors/get_metadata_error.rb +7 -0
- data/lib/dropbox_api/errors/http_error.rb +6 -0
- data/lib/dropbox_api/errors/list_folder_continue_error.rb +8 -0
- data/lib/dropbox_api/errors/list_folder_error.rb +7 -0
- data/lib/dropbox_api/errors/list_folder_longpoll_error.rb +7 -0
- data/lib/dropbox_api/errors/list_revisions_error.rb +7 -0
- data/lib/dropbox_api/errors/list_shared_links_error.rb +8 -0
- data/lib/dropbox_api/errors/lookup_error.rb +11 -0
- data/lib/dropbox_api/errors/preview_error.rb +10 -0
- data/lib/dropbox_api/errors/relocation_error.rb +13 -0
- data/lib/dropbox_api/errors/restore_error.rb +9 -0
- data/lib/dropbox_api/errors/search_error.rb +7 -0
- data/lib/dropbox_api/errors/settings_error.rb +8 -0
- data/lib/dropbox_api/errors/share_folder_error.rb +11 -0
- data/lib/dropbox_api/errors/share_path_error.rb +17 -0
- data/lib/dropbox_api/errors/shared_folder_access_error.rb +10 -0
- data/lib/dropbox_api/errors/upload_error.rb +7 -0
- data/lib/dropbox_api/errors/upload_write_failed_error.rb +7 -0
- data/lib/dropbox_api/errors/write_conflict_error.rb +9 -0
- data/lib/dropbox_api/errors/write_error.rb +11 -0
- data/lib/dropbox_api/metadata/add_member.rb +62 -0
- data/lib/dropbox_api/metadata/base.rb +22 -0
- data/lib/dropbox_api/metadata/basic_account.rb +29 -0
- data/lib/dropbox_api/metadata/deleted.rb +15 -0
- data/lib/dropbox_api/metadata/field.rb +34 -0
- data/lib/dropbox_api/metadata/file.rb +30 -0
- data/lib/dropbox_api/metadata/file_link.rb +46 -0
- data/lib/dropbox_api/metadata/folder.rb +17 -0
- data/lib/dropbox_api/metadata/folder_link.rb +12 -0
- data/lib/dropbox_api/metadata/folder_sharing_info.rb +13 -0
- data/lib/dropbox_api/metadata/link_permissions.rb +19 -0
- data/lib/dropbox_api/metadata/name.rb +16 -0
- data/lib/dropbox_api/metadata/resource.rb +31 -0
- data/lib/dropbox_api/metadata/shared_folder.rb +26 -0
- data/lib/dropbox_api/metadata/shared_folder_policy.rb +12 -0
- data/lib/dropbox_api/metadata/shared_link.rb +26 -0
- data/lib/dropbox_api/metadata/team.rb +6 -0
- data/lib/dropbox_api/metadata/team_member_info.rb +17 -0
- data/lib/dropbox_api/middleware/decode_result.rb +26 -0
- data/lib/dropbox_api/result_builder.rb +31 -0
- data/lib/dropbox_api/results/base.rb +7 -0
- data/lib/dropbox_api/results/get_temporary_link_result.rb +11 -0
- data/lib/dropbox_api/results/list_folder_get_latest_cursor_result.rb +7 -0
- data/lib/dropbox_api/results/list_folder_longpoll_result.rb +15 -0
- data/lib/dropbox_api/results/list_folder_result.rb +22 -0
- data/lib/dropbox_api/results/list_revisions_result.rb +14 -0
- data/lib/dropbox_api/results/list_shared_links_result.rb +22 -0
- data/lib/dropbox_api/results/search/match.rb +15 -0
- data/lib/dropbox_api/results/search_result.rb +22 -0
- data/lib/dropbox_api/results/share_folder_launch.rb +14 -0
- data/lib/dropbox_api/results/shared_folder_members.rb +19 -0
- data/lib/dropbox_api/results/void_result.rb +4 -0
- data/lib/dropbox_api/version.rb +3 -0
- metadata +256 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'oauth2'
|
2
|
+
|
3
|
+
module DropboxApi
|
4
|
+
class Authenticator < OAuth2::Client
|
5
|
+
def initialize(client_id, client_secret)
|
6
|
+
@oauth_client = OAuth2::Client.new(client_id, client_secret, {
|
7
|
+
:authorize_url => 'https://www.dropbox.com/1/oauth2/authorize',
|
8
|
+
:token_url => 'https://api.dropboxapi.com/1/oauth2/token'
|
9
|
+
})
|
10
|
+
end
|
11
|
+
|
12
|
+
def authorize_url
|
13
|
+
@oauth_client.auth_code.authorize_url
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_token(oauth_code)
|
17
|
+
@oauth_client.auth_code.get_token oauth_code
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module DropboxApi
|
2
|
+
class Client
|
3
|
+
def initialize(oauth_bearer = ENV["DROPBOX_OAUTH_BEARER"])
|
4
|
+
@connection_builder = ConnectionBuilder.new(oauth_bearer)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.add_endpoint(name, endpoint)
|
8
|
+
define_method(name) do |*args, &block|
|
9
|
+
endpoint.new(@connection_builder).send(name, *args, &block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DropboxApi
|
2
|
+
class ConnectionBuilder
|
3
|
+
def initialize(oauth_bearer)
|
4
|
+
@oauth_bearer = oauth_bearer
|
5
|
+
end
|
6
|
+
|
7
|
+
def build(url)
|
8
|
+
Faraday.new(url) do |c|
|
9
|
+
c.authorization :Bearer, @oauth_bearer
|
10
|
+
|
11
|
+
yield c
|
12
|
+
|
13
|
+
c.adapter Faraday.default_adapter
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module DropboxApi::Endpoints
|
2
|
+
class Base
|
3
|
+
def self.add_endpoint(name, &block)
|
4
|
+
define_method(name, block)
|
5
|
+
DropboxApi::Client.add_endpoint(name, self)
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def perform_request(params)
|
11
|
+
process_response(get_response(params))
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_response(*args)
|
15
|
+
run_request(*build_request(*args))
|
16
|
+
end
|
17
|
+
|
18
|
+
def process_response(raw_response)
|
19
|
+
case raw_response.status
|
20
|
+
when 200, 409
|
21
|
+
# Status code 409 is "Endpoint-specific error". We need to look at
|
22
|
+
# the response body to build an exception.
|
23
|
+
build_result(raw_response.env[:api_result])
|
24
|
+
else
|
25
|
+
raise DropboxApi::Errors::HttpError,
|
26
|
+
"HTTP #{raw_response.status}: #{raw_response.body}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def build_result(api_result)
|
31
|
+
result_builder = DropboxApi::ResultBuilder.new(api_result)
|
32
|
+
|
33
|
+
if result_builder.has_error?
|
34
|
+
raise result_builder.build_error(self.class::ErrorType)
|
35
|
+
else
|
36
|
+
result_builder.build(self.class::ResultType)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def run_request(body, headers)
|
41
|
+
@connection.run_request(self.class::Method, self.class::Path, body, headers)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module DropboxApi::Endpoints
|
2
|
+
class ContentDownload < DropboxApi::Endpoints::Base
|
3
|
+
def initialize(builder)
|
4
|
+
@connection = builder.build("https://content.dropboxapi.com") do |c|
|
5
|
+
c.response :decode_result
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_request(params)
|
10
|
+
body = nil
|
11
|
+
headers = {
|
12
|
+
'Dropbox-API-Arg' => JSON.dump(params),
|
13
|
+
'Content-Type' => ''
|
14
|
+
}
|
15
|
+
|
16
|
+
return body, headers
|
17
|
+
end
|
18
|
+
|
19
|
+
def perform_request(params)
|
20
|
+
response = get_response(params)
|
21
|
+
api_result = process_response response
|
22
|
+
|
23
|
+
# TODO: Stream response, current implementation will fail with very large
|
24
|
+
# files.
|
25
|
+
yield response.body if block_given?
|
26
|
+
|
27
|
+
api_result
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
# TODO:
|
32
|
+
# 1. Combine ContentDownload and ContentUpload to share its initialize method.
|
33
|
+
# 2. Reorganize the methods which create the request.
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module DropboxApi::Endpoints
|
2
|
+
class ContentUpload < DropboxApi::Endpoints::Base
|
3
|
+
def initialize(builder)
|
4
|
+
@connection = builder.build("https://content.dropboxapi.com") do |c|
|
5
|
+
c.response :decode_result
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_request(params, content)
|
10
|
+
# TODO: It would be better to have a stream object on which we can call
|
11
|
+
# #read, rather than the full file content.
|
12
|
+
body = content
|
13
|
+
headers = {
|
14
|
+
'Dropbox-API-Arg' => JSON.dump(params),
|
15
|
+
'Content-Type' => 'application/octet-stream'
|
16
|
+
}
|
17
|
+
|
18
|
+
return body, headers
|
19
|
+
end
|
20
|
+
|
21
|
+
def perform_request(params, content)
|
22
|
+
process_response(get_response(params, content))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class Copy < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/copy".freeze
|
5
|
+
ResultType = DropboxApi::Metadata::Resource
|
6
|
+
ErrorType = DropboxApi::Errors::RelocationError
|
7
|
+
|
8
|
+
# @method copy(from, to)
|
9
|
+
# Copy a file or folder to a different location in the user's Dropbox.
|
10
|
+
# If the source path is a folder all its contents will be copied.
|
11
|
+
#
|
12
|
+
# @param from [String] Path in the user's Dropbox to be copied or moved.
|
13
|
+
# @param to [String] Path in the user's Dropbox that is the destination.
|
14
|
+
# @return The moved file.
|
15
|
+
add_endpoint :copy do |from, to|
|
16
|
+
perform_request({
|
17
|
+
:from_path => from,
|
18
|
+
:to_path => to
|
19
|
+
})
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class CreateFolder < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/create_folder".freeze
|
5
|
+
ResultType = DropboxApi::Metadata::Folder
|
6
|
+
ErrorType = DropboxApi::Errors::CreateFolderError
|
7
|
+
|
8
|
+
# @method create_folder(path)
|
9
|
+
# Create a folder at a given path.
|
10
|
+
#
|
11
|
+
# @param path [String] Path in the user's Dropbox to create.
|
12
|
+
# @return [DropboxApi::Metadata::Folder] The new folder.
|
13
|
+
add_endpoint :create_folder do |path|
|
14
|
+
perform_request({
|
15
|
+
:path => path
|
16
|
+
})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class Delete < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/delete".freeze
|
5
|
+
ResultType = DropboxApi::Metadata::Resource
|
6
|
+
ErrorType = DropboxApi::Errors::DeleteError
|
7
|
+
|
8
|
+
# @method delete(path)
|
9
|
+
# Delete the file or folder at a given path.
|
10
|
+
#
|
11
|
+
# If the path is a folder, all its contents will be deleted too.
|
12
|
+
#
|
13
|
+
# A successful response indicates that the file or folder was deleted.
|
14
|
+
# The returned metadata will be the corresponding FileMetadata or
|
15
|
+
# FolderMetadata for the item at time of deletion, and not a
|
16
|
+
# DeletedMetadata object.
|
17
|
+
#
|
18
|
+
# @param path [String] Path in the user's Dropbox to delete.
|
19
|
+
add_endpoint :delete do |path|
|
20
|
+
perform_request({
|
21
|
+
:path => path
|
22
|
+
})
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class Download < DropboxApi::Endpoints::ContentDownload
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/download".freeze
|
5
|
+
ResultType = DropboxApi::Metadata::File
|
6
|
+
ErrorType = DropboxApi::Errors::DownloadError
|
7
|
+
|
8
|
+
# @method download(path)
|
9
|
+
# Download a file from a user's Dropbox.
|
10
|
+
#
|
11
|
+
# @param path [String] The path of the file to download.
|
12
|
+
add_endpoint :download do |path, &block|
|
13
|
+
perform_request({:path => path}, &block)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class GetMetadata < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/get_metadata".freeze
|
5
|
+
ResultType = DropboxApi::Metadata::Resource
|
6
|
+
ErrorType = DropboxApi::Errors::GetMetadataError
|
7
|
+
|
8
|
+
include DropboxApi::Endpoints::OptionsValidator
|
9
|
+
|
10
|
+
# @method get_metadata(path, options = {})
|
11
|
+
# Returns the metadata for a file or folder.
|
12
|
+
#
|
13
|
+
# Note: Metadata for the root folder is unsupported.
|
14
|
+
#
|
15
|
+
# @param path [String] The path of a file or folder on Dropbox.
|
16
|
+
# @option include_media_info [Boolean] If `true`, FileMetadata.media_info
|
17
|
+
# is set for photo and video. The default for this field is `false`.
|
18
|
+
# @option include_deleted [Boolean] If `true`, DeletedMetadata will be
|
19
|
+
# returned for deleted file or folder, otherwise LookupError.not_found
|
20
|
+
# will be returned. The default for this field is False.
|
21
|
+
add_endpoint :get_metadata do |path, options = {}|
|
22
|
+
validate_options([:include_media_info, :include_deleted], options)
|
23
|
+
|
24
|
+
perform_request(options.merge({
|
25
|
+
:path => path
|
26
|
+
}))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class GetPreview < DropboxApi::Endpoints::ContentDownload
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/get_preview".freeze
|
5
|
+
ResultType = DropboxApi::Metadata::File
|
6
|
+
ErrorType = DropboxApi::Errors::PreviewError
|
7
|
+
|
8
|
+
# @method get_preview(path)
|
9
|
+
# Get a preview for a file. Currently previews are only generated for the
|
10
|
+
# files with the following extensions: .doc, .docx, .docm, .ppt, .pps,
|
11
|
+
# .ppsx, .ppsm, .pptx, .pptm, .xls, .xlsx, .xlsm, .rtf
|
12
|
+
#
|
13
|
+
# @param path [String] The path of the file to preview.
|
14
|
+
add_endpoint :get_preview do |path, &block|
|
15
|
+
perform_request({:path => path}, &block)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class GetTemporaryLink < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/get_temporary_link".freeze
|
5
|
+
ResultType = DropboxApi::Results::GetTemporaryLinkResult
|
6
|
+
ErrorType = DropboxApi::Errors::GetMetadataError
|
7
|
+
|
8
|
+
# @method get_temporary_link(path)
|
9
|
+
# Get a temporary link to stream content of a file. This link will expire
|
10
|
+
# in four hours and afterwards you will get 410 Gone. Content-Type of the
|
11
|
+
# link is determined automatically by the file's mime type.
|
12
|
+
#
|
13
|
+
# @param path [String] The path to the file you want a temporary link to.
|
14
|
+
add_endpoint :get_temporary_link do |path|
|
15
|
+
perform_request({:path => path})
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class GetThumbnail < DropboxApi::Endpoints::ContentDownload
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/get_thumbnail".freeze
|
5
|
+
ResultType = DropboxApi::Metadata::File
|
6
|
+
ErrorType = DropboxApi::Errors::PreviewError
|
7
|
+
|
8
|
+
include DropboxApi::Endpoints::OptionsValidator
|
9
|
+
|
10
|
+
# @method get_thumbnail(path, options = {})
|
11
|
+
# Get a thumbnail for an image.
|
12
|
+
#
|
13
|
+
# This method currently supports files with the following file extensions:
|
14
|
+
# jpg, jpeg, png, tiff, tif, gif and bmp. Photos that are larger than 20MB
|
15
|
+
# in size won't be converted to a thumbnail.
|
16
|
+
#
|
17
|
+
# @param path [String] The path to the image file you want to thumbnail.
|
18
|
+
# @option format [:jpeg, :png] The format for the thumbnail image, jpeg
|
19
|
+
# (default) or png. For images that are photos, jpeg should be preferred,
|
20
|
+
# while png is better for screenshots and digital arts. The default is
|
21
|
+
# :jpeg.
|
22
|
+
# @option size [:w32h32, :w64h64, :w128h128, :w640h480, :w1024h768] The
|
23
|
+
# size for the thumbnail image. The default is :w64h64
|
24
|
+
add_endpoint :get_thumbnail do |path, options = {}, &block|
|
25
|
+
validate_options([:format, :size], options)
|
26
|
+
options[:format] ||= :jpeg
|
27
|
+
options[:size] ||= :w64h64
|
28
|
+
|
29
|
+
perform_request(options.merge({
|
30
|
+
:path => path
|
31
|
+
}), &block)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class ListFolder < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/list_folder".freeze
|
5
|
+
ResultType = DropboxApi::Results::ListFolderResult
|
6
|
+
ErrorType = DropboxApi::Errors::ListFolderError
|
7
|
+
|
8
|
+
include DropboxApi::Endpoints::OptionsValidator
|
9
|
+
|
10
|
+
# @method list_folder(path, options = {})
|
11
|
+
# Returns the contents of a folder.
|
12
|
+
#
|
13
|
+
# @param path [String] The path to the folder you want to read.
|
14
|
+
# @option recursive [Boolean] If `true`, the list folder operation will be
|
15
|
+
# applied recursively to all subfolders and the response will contain
|
16
|
+
# contents of all subfolders. The default for this field is `false`.
|
17
|
+
# @option include_media_info [Boolean] If `true`, FileMetadata.media_info
|
18
|
+
# is set for photo and video. The default for this field is `false`.
|
19
|
+
# @option include_deleted [Boolean] If `true`, DeletedMetadata will be
|
20
|
+
# returned for deleted file or folder, otherwise LookupError.not_found
|
21
|
+
# will be returned. The default for this field is `false`.
|
22
|
+
add_endpoint :list_folder do |path, options = {}|
|
23
|
+
validate_options([
|
24
|
+
:recursive,
|
25
|
+
:include_media_info,
|
26
|
+
:include_deleted,
|
27
|
+
:include_has_explicit_shared_members
|
28
|
+
], options)
|
29
|
+
options[:recursive] ||= false
|
30
|
+
options[:include_media_info] ||= false
|
31
|
+
options[:include_deleted] ||= false
|
32
|
+
|
33
|
+
perform_request options.merge({
|
34
|
+
:path => path
|
35
|
+
})
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class ListFolderContinue < DropboxApi::Endpoints::Rpc
|
3
|
+
# NOTE: This hasn't been tested with real data, I couldn't make a query
|
4
|
+
# long enough to enable the `has_more` attribute in the
|
5
|
+
# `ListFolderResult`.
|
6
|
+
Method = :post
|
7
|
+
Path = "/2/files/list_folder/continue".freeze
|
8
|
+
ResultType = DropboxApi::Results::ListFolderResult
|
9
|
+
ErrorType = DropboxApi::Errors::ListFolderContinueError
|
10
|
+
|
11
|
+
# @method list_folder_continue(cursor)
|
12
|
+
# Once a cursor has been retrieved from `list_folder`, use this to paginate
|
13
|
+
# through all files and retrieve updates to the folder.
|
14
|
+
#
|
15
|
+
# @param cursor [String] The cursor returned by your last call to
|
16
|
+
# list_folder or list_folder_continue.
|
17
|
+
add_endpoint :list_folder_continue do |cursor|
|
18
|
+
perform_request :cursor => cursor
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module DropboxApi::Endpoints::Files
|
2
|
+
class ListFolderGetLatestCursor < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/files/list_folder/get_latest_cursor".freeze
|
5
|
+
ResultType = DropboxApi::Results::ListFolderGetLatestCursorResult
|
6
|
+
ErrorType = DropboxApi::Errors::ListFolderError
|
7
|
+
|
8
|
+
include DropboxApi::Endpoints::OptionsValidator
|
9
|
+
|
10
|
+
# @method list_folder_get_latest_cursor(options)
|
11
|
+
# A way to quickly get a cursor for the folder's state. Unlike list_folder,
|
12
|
+
# list_folder_get_latest_cursor doesn't return any entries. This endpoint
|
13
|
+
# is for app which only needs to know about new files and modifications and
|
14
|
+
# doesn't need to know about files that already exist in Dropbox.
|
15
|
+
#
|
16
|
+
# @param path [String] The path to the folder you want to read.
|
17
|
+
# @option recursive [Boolean] If `true`, the list folder operation will be
|
18
|
+
# applied recursively to all subfolders and the response will contain
|
19
|
+
# contents of all subfolders. The default for this field is `false`.
|
20
|
+
# @option include_media_info [Boolean] If `true`, FileMetadata.media_info
|
21
|
+
# is set for photo and video. The default for this field is `false`.
|
22
|
+
# @option include_deleted [Boolean] If `true`, DeletedMetadata will be
|
23
|
+
# returned for deleted file or folder, otherwise LookupError.not_found
|
24
|
+
# will be returned. The default for this field is False.
|
25
|
+
add_endpoint :list_folder_get_latest_cursor do |options = {}|
|
26
|
+
validate_options([
|
27
|
+
:path,
|
28
|
+
:recursive,
|
29
|
+
:include_media_info,
|
30
|
+
:include_deleted,
|
31
|
+
:include_has_explicit_shared_members
|
32
|
+
], options)
|
33
|
+
options[:recursive] ||= false
|
34
|
+
options[:include_media_info] ||= false
|
35
|
+
options[:include_deleted] ||= false
|
36
|
+
|
37
|
+
perform_request options
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|