dropbox_api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE +21 -0
  7. data/README.md +118 -0
  8. data/Rakefile +6 -0
  9. data/TODO.md +8 -0
  10. data/api_coverage.md +107 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +7 -0
  13. data/dropbox_api.gemspec +30 -0
  14. data/lib/dropbox_api.rb +102 -0
  15. data/lib/dropbox_api/authenticator.rb +20 -0
  16. data/lib/dropbox_api/client.rb +13 -0
  17. data/lib/dropbox_api/connection_builder.rb +17 -0
  18. data/lib/dropbox_api/endpoints/base.rb +44 -0
  19. data/lib/dropbox_api/endpoints/content_download.rb +33 -0
  20. data/lib/dropbox_api/endpoints/content_upload.rb +25 -0
  21. data/lib/dropbox_api/endpoints/files/copy.rb +22 -0
  22. data/lib/dropbox_api/endpoints/files/create_folder.rb +19 -0
  23. data/lib/dropbox_api/endpoints/files/delete.rb +25 -0
  24. data/lib/dropbox_api/endpoints/files/download.rb +16 -0
  25. data/lib/dropbox_api/endpoints/files/get_metadata.rb +29 -0
  26. data/lib/dropbox_api/endpoints/files/get_preview.rb +18 -0
  27. data/lib/dropbox_api/endpoints/files/get_temporary_link.rb +18 -0
  28. data/lib/dropbox_api/endpoints/files/get_thumbnail.rb +34 -0
  29. data/lib/dropbox_api/endpoints/files/list_folder.rb +38 -0
  30. data/lib/dropbox_api/endpoints/files/list_folder_continue.rb +21 -0
  31. data/lib/dropbox_api/endpoints/files/list_folder_get_latest_cursor.rb +40 -0
  32. data/lib/dropbox_api/endpoints/files/list_folder_longpoll.rb +36 -0
  33. data/lib/dropbox_api/endpoints/files/list_revisions.rb +27 -0
  34. data/lib/dropbox_api/endpoints/files/move.rb +22 -0
  35. data/lib/dropbox_api/endpoints/files/restore.rb +20 -0
  36. data/lib/dropbox_api/endpoints/files/search.rb +44 -0
  37. data/lib/dropbox_api/endpoints/files/upload.rb +26 -0
  38. data/lib/dropbox_api/endpoints/options_validator.rb +11 -0
  39. data/lib/dropbox_api/endpoints/rpc.rb +18 -0
  40. data/lib/dropbox_api/endpoints/rpc_notify.rb +11 -0
  41. data/lib/dropbox_api/endpoints/sharing/add_folder_member.rb +54 -0
  42. data/lib/dropbox_api/endpoints/sharing/create_shared_link_with_settings.rb +23 -0
  43. data/lib/dropbox_api/endpoints/sharing/list_folder_members.rb +31 -0
  44. data/lib/dropbox_api/endpoints/sharing/list_shared_links.rb +31 -0
  45. data/lib/dropbox_api/endpoints/sharing/share_folder.rb +58 -0
  46. data/lib/dropbox_api/endpoints/users/get_account.rb +17 -0
  47. data/lib/dropbox_api/errors/add_folder_member_error.rb +16 -0
  48. data/lib/dropbox_api/errors/add_member_selector_error.rb +11 -0
  49. data/lib/dropbox_api/errors/already_shared_error.rb +7 -0
  50. data/lib/dropbox_api/errors/basic_error.rb +83 -0
  51. data/lib/dropbox_api/errors/create_folder_error.rb +7 -0
  52. data/lib/dropbox_api/errors/create_shared_link_with_settings_error.rb +11 -0
  53. data/lib/dropbox_api/errors/delete_error.rb +8 -0
  54. data/lib/dropbox_api/errors/download_error.rb +7 -0
  55. data/lib/dropbox_api/errors/get_account_error.rb +7 -0
  56. data/lib/dropbox_api/errors/get_metadata_error.rb +7 -0
  57. data/lib/dropbox_api/errors/http_error.rb +6 -0
  58. data/lib/dropbox_api/errors/list_folder_continue_error.rb +8 -0
  59. data/lib/dropbox_api/errors/list_folder_error.rb +7 -0
  60. data/lib/dropbox_api/errors/list_folder_longpoll_error.rb +7 -0
  61. data/lib/dropbox_api/errors/list_revisions_error.rb +7 -0
  62. data/lib/dropbox_api/errors/list_shared_links_error.rb +8 -0
  63. data/lib/dropbox_api/errors/lookup_error.rb +11 -0
  64. data/lib/dropbox_api/errors/preview_error.rb +10 -0
  65. data/lib/dropbox_api/errors/relocation_error.rb +13 -0
  66. data/lib/dropbox_api/errors/restore_error.rb +9 -0
  67. data/lib/dropbox_api/errors/search_error.rb +7 -0
  68. data/lib/dropbox_api/errors/settings_error.rb +8 -0
  69. data/lib/dropbox_api/errors/share_folder_error.rb +11 -0
  70. data/lib/dropbox_api/errors/share_path_error.rb +17 -0
  71. data/lib/dropbox_api/errors/shared_folder_access_error.rb +10 -0
  72. data/lib/dropbox_api/errors/upload_error.rb +7 -0
  73. data/lib/dropbox_api/errors/upload_write_failed_error.rb +7 -0
  74. data/lib/dropbox_api/errors/write_conflict_error.rb +9 -0
  75. data/lib/dropbox_api/errors/write_error.rb +11 -0
  76. data/lib/dropbox_api/metadata/add_member.rb +62 -0
  77. data/lib/dropbox_api/metadata/base.rb +22 -0
  78. data/lib/dropbox_api/metadata/basic_account.rb +29 -0
  79. data/lib/dropbox_api/metadata/deleted.rb +15 -0
  80. data/lib/dropbox_api/metadata/field.rb +34 -0
  81. data/lib/dropbox_api/metadata/file.rb +30 -0
  82. data/lib/dropbox_api/metadata/file_link.rb +46 -0
  83. data/lib/dropbox_api/metadata/folder.rb +17 -0
  84. data/lib/dropbox_api/metadata/folder_link.rb +12 -0
  85. data/lib/dropbox_api/metadata/folder_sharing_info.rb +13 -0
  86. data/lib/dropbox_api/metadata/link_permissions.rb +19 -0
  87. data/lib/dropbox_api/metadata/name.rb +16 -0
  88. data/lib/dropbox_api/metadata/resource.rb +31 -0
  89. data/lib/dropbox_api/metadata/shared_folder.rb +26 -0
  90. data/lib/dropbox_api/metadata/shared_folder_policy.rb +12 -0
  91. data/lib/dropbox_api/metadata/shared_link.rb +26 -0
  92. data/lib/dropbox_api/metadata/team.rb +6 -0
  93. data/lib/dropbox_api/metadata/team_member_info.rb +17 -0
  94. data/lib/dropbox_api/middleware/decode_result.rb +26 -0
  95. data/lib/dropbox_api/result_builder.rb +31 -0
  96. data/lib/dropbox_api/results/base.rb +7 -0
  97. data/lib/dropbox_api/results/get_temporary_link_result.rb +11 -0
  98. data/lib/dropbox_api/results/list_folder_get_latest_cursor_result.rb +7 -0
  99. data/lib/dropbox_api/results/list_folder_longpoll_result.rb +15 -0
  100. data/lib/dropbox_api/results/list_folder_result.rb +22 -0
  101. data/lib/dropbox_api/results/list_revisions_result.rb +14 -0
  102. data/lib/dropbox_api/results/list_shared_links_result.rb +22 -0
  103. data/lib/dropbox_api/results/search/match.rb +15 -0
  104. data/lib/dropbox_api/results/search_result.rb +22 -0
  105. data/lib/dropbox_api/results/share_folder_launch.rb +14 -0
  106. data/lib/dropbox_api/results/shared_folder_members.rb +19 -0
  107. data/lib/dropbox_api/results/void_result.rb +4 -0
  108. data/lib/dropbox_api/version.rb +3 -0
  109. 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