dropbox_api 0.1.10 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +24 -12
- data/RELEASING.md +5 -0
- data/api_coverage.md +9 -0
- data/lib/dropbox_api.rb +23 -4
- data/lib/dropbox_api/chunked_uploader.rb +48 -0
- data/lib/dropbox_api/endpoints/content_upload.rb +16 -9
- data/lib/dropbox_api/endpoints/file_requests/create_file_request.rb +21 -0
- data/lib/dropbox_api/endpoints/files/get_metadata.rb +1 -1
- data/lib/dropbox_api/endpoints/files/get_thumbnail.rb +4 -4
- data/lib/dropbox_api/endpoints/files/get_thumbnail_batch.rb +38 -0
- data/lib/dropbox_api/endpoints/files/list_folder.rb +16 -1
- data/lib/dropbox_api/endpoints/files/list_folder_get_latest_cursor.rb +8 -9
- data/lib/dropbox_api/endpoints/files/list_folder_longpoll.rb +1 -1
- data/lib/dropbox_api/endpoints/files/list_revisions.rb +1 -1
- data/lib/dropbox_api/endpoints/files/move.rb +2 -2
- data/lib/dropbox_api/endpoints/files/save_url_check_job_status.rb +1 -1
- data/lib/dropbox_api/endpoints/files/search.rb +1 -1
- data/lib/dropbox_api/endpoints/files/upload.rb +17 -27
- data/lib/dropbox_api/endpoints/files/upload_session_append_v2.rb +7 -5
- data/lib/dropbox_api/endpoints/files/upload_session_finish.rb +5 -3
- data/lib/dropbox_api/endpoints/files/upload_session_start.rb +3 -3
- data/lib/dropbox_api/endpoints/rpc_content.rb +9 -0
- data/lib/dropbox_api/endpoints/sharing/add_file_member.rb +6 -6
- data/lib/dropbox_api/endpoints/sharing/add_folder_member.rb +5 -5
- data/lib/dropbox_api/endpoints/sharing/create_shared_link_with_settings.rb +2 -2
- data/lib/dropbox_api/endpoints/sharing/list_folder_members.rb +1 -1
- data/lib/dropbox_api/endpoints/sharing/list_shared_links.rb +1 -1
- data/lib/dropbox_api/endpoints/sharing/share_folder.rb +1 -1
- data/lib/dropbox_api/endpoints/virtual/upload_by_chunks.rb +49 -0
- data/lib/dropbox_api/errors/basic_error.rb +2 -0
- data/lib/dropbox_api/errors/create_file_request_error.rb +6 -0
- data/lib/dropbox_api/errors/thumbnail_batch_error.rb +7 -0
- data/lib/dropbox_api/errors/thumbnail_error.rb +10 -0
- data/lib/dropbox_api/metadata/access_level.rb +7 -4
- data/lib/dropbox_api/metadata/add_file_member_result.rb +13 -10
- data/lib/dropbox_api/metadata/add_member.rb +19 -16
- data/lib/dropbox_api/metadata/basic_account.rb +18 -15
- data/lib/dropbox_api/metadata/commit_info.rb +35 -1
- data/lib/dropbox_api/metadata/deleted.rb +9 -6
- data/lib/dropbox_api/metadata/file.rb +18 -15
- data/lib/dropbox_api/metadata/file_link_metadata.rb +48 -0
- data/lib/dropbox_api/metadata/file_member_action.rb +8 -5
- data/lib/dropbox_api/metadata/file_request.rb +30 -0
- data/lib/dropbox_api/metadata/folder.rb +9 -6
- data/lib/dropbox_api/metadata/{folder_link.rb → folder_link_metadata.rb} +1 -1
- data/lib/dropbox_api/metadata/folder_sharing_info.rb +7 -4
- data/lib/dropbox_api/metadata/link_permissions.rb +11 -8
- data/lib/dropbox_api/metadata/media_info.rb +14 -7
- data/lib/dropbox_api/metadata/media_metadata.rb +14 -12
- data/lib/dropbox_api/metadata/member.rb +12 -9
- data/lib/dropbox_api/metadata/member_action.rb +13 -10
- data/lib/dropbox_api/metadata/member_permission.rb +11 -8
- data/lib/dropbox_api/metadata/member_permission_list.rb +19 -17
- data/lib/dropbox_api/metadata/name.rb +9 -6
- data/lib/dropbox_api/metadata/photo_metadata.rb +14 -11
- data/lib/dropbox_api/metadata/resource.rb +1 -1
- data/lib/dropbox_api/metadata/shared_folder.rb +16 -13
- data/lib/dropbox_api/metadata/shared_folder_policy.rb +7 -4
- data/lib/dropbox_api/metadata/shared_link.rb +30 -18
- data/lib/dropbox_api/metadata/shared_link_metadata.rb +26 -0
- data/lib/dropbox_api/metadata/space_allocation.rb +7 -4
- data/lib/dropbox_api/metadata/space_usage.rb +9 -6
- data/lib/dropbox_api/metadata/{symbol.rb → tag.rb} +1 -1
- data/lib/dropbox_api/metadata/team_member_info.rb +11 -8
- data/lib/dropbox_api/metadata/thumbnail_batch_result_data.rb +6 -0
- data/lib/dropbox_api/metadata/thumbnail_batch_result_entry.rb +23 -0
- data/lib/dropbox_api/metadata/upload_session_cursor.rb +7 -4
- data/lib/dropbox_api/metadata/video_metadata.rb +15 -12
- data/lib/dropbox_api/metadata/write_mode.rb +3 -3
- data/lib/dropbox_api/{endpoints/options_validator.rb → options_validator.rb} +1 -1
- data/lib/dropbox_api/results/add_file_member_result_list.rb +1 -1
- data/lib/dropbox_api/results/get_thumbnail_batch_result.rb +9 -0
- data/lib/dropbox_api/results/list_shared_links_result.rb +1 -1
- data/lib/dropbox_api/version.rb +1 -1
- metadata +20 -6
- data/lib/dropbox_api/metadata/file_link.rb +0 -45
@@ -1,20 +1,23 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# An action will be one of the following:
|
3
3
|
#
|
4
|
-
# -
|
4
|
+
# - `:leave_a_copy`: Allow the member to keep a copy of the folder when
|
5
5
|
# removing.
|
6
|
-
# -
|
7
|
-
# -
|
8
|
-
# -
|
9
|
-
# -
|
6
|
+
# - `:make_editor`: Make the member an editor of the folder.
|
7
|
+
# - `:make_owner`: Make the member an owner of the folder.
|
8
|
+
# - `:make_viewer`: Make the member a viewer of the folder.
|
9
|
+
# - `:make_viewer_no_comment`: Make the member a viewer of the folder without
|
10
10
|
# commenting permissions.
|
11
|
-
# -
|
11
|
+
# - `:remove`: Remove the member from the folder.
|
12
12
|
#
|
13
13
|
# Example of a serialized {MemberAction} object:
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
|
14
|
+
#
|
15
|
+
# ```json
|
16
|
+
# {
|
17
|
+
# ".tag": "leave_a_copy"
|
18
|
+
# }
|
19
|
+
# ```
|
20
|
+
class MemberAction < DropboxApi::Metadata::Tag
|
18
21
|
VALID_MEMBER_ACTIONS = [
|
19
22
|
:leave_a_copy,
|
20
23
|
:make_editor,
|
@@ -1,14 +1,17 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# This is an example of a serialized {MemberPermission}:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# "
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# "action": {
|
7
|
+
# ".tag": "remove"
|
8
|
+
# },
|
9
|
+
# "allow": false,
|
10
|
+
# "reason": {
|
11
|
+
# ".tag": "target_is_self"
|
11
12
|
# }
|
13
|
+
# }
|
14
|
+
# ```
|
12
15
|
#
|
13
16
|
# This is normally contained in a {MemberPermissionList} object.
|
14
17
|
class MemberPermission < Base
|
@@ -3,23 +3,25 @@ module DropboxApi::Metadata
|
|
3
3
|
# shared file or folder.
|
4
4
|
#
|
5
5
|
# This is an example of a serialized {MemberActionList}:
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# }
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
# }
|
6
|
+
# ```json
|
7
|
+
# [{
|
8
|
+
# "action": {
|
9
|
+
# ".tag": "remove"
|
10
|
+
# },
|
11
|
+
# "allow": false,
|
12
|
+
# "reason": {
|
13
|
+
# ".tag": "target_is_self"
|
14
|
+
# }
|
15
|
+
# }, {
|
16
|
+
# "action": {
|
17
|
+
# ".tag": "make_owner"
|
18
|
+
# },
|
19
|
+
# "allow": false,
|
20
|
+
# "reason": {
|
21
|
+
# ".tag": "target_is_self"
|
22
|
+
# }
|
23
|
+
# }]
|
24
|
+
# ```
|
23
25
|
class MemberPermissionList < Array
|
24
26
|
def initialize(list)
|
25
27
|
super(list.map { |i| DropboxApi::Metadata::MemberPermission.new i })
|
@@ -1,11 +1,14 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# Example of a serialized {Name} object:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# "given_name": "Franz",
|
7
|
+
# "surname": "Ferdinand",
|
8
|
+
# "familiar_name": "Franz",
|
9
|
+
# "display_name": "Franz Ferdinand (Personal)"
|
10
|
+
# }
|
11
|
+
# ```
|
9
12
|
class Name < Base
|
10
13
|
field :given_name, String
|
11
14
|
field :surname, String
|
@@ -1,17 +1,20 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# Example of a serialized {PhotoMetadata} object:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# "
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
# "
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# ".tag": "photo",
|
7
|
+
# "dimensions": {
|
8
|
+
# "height": 1500,
|
9
|
+
# "width": 1500
|
10
|
+
# },
|
11
|
+
# "location": {
|
12
|
+
# "latitude": 10.123456,
|
13
|
+
# "longitude": 5.123456
|
14
14
|
# }
|
15
|
+
# "time_taken": "2016-09-04T17:00:27Z"
|
16
|
+
# }
|
17
|
+
# ```
|
15
18
|
class PhotoMetadata < Base
|
16
19
|
field :dimensions, DropboxApi::Metadata::Dimensions, :optional
|
17
20
|
field :location, DropboxApi::Metadata::Location, :optional
|
@@ -2,7 +2,7 @@ module DropboxApi::Metadata
|
|
2
2
|
# This class is used as an adapter so we can create an object of the pertinent
|
3
3
|
# class when we need to infer the type from the data.
|
4
4
|
#
|
5
|
-
# For example, calling
|
5
|
+
# For example, calling `Resource.new({".tag" => "file", :name => ...})` will
|
6
6
|
# instantiate a `File` object.
|
7
7
|
#
|
8
8
|
# So this could initalize an object of either `File`, `Folder` or `Deleted`.
|
@@ -1,18 +1,21 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# Example of a serialized {SharedFolder} object:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
# },
|
11
|
-
# "
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# ".tag" => "complete",
|
7
|
+
# "access_type" => {".tag"=>"owner"},
|
8
|
+
# "is_team_folder" => false,
|
9
|
+
# "policy" => {
|
10
|
+
# "acl_update_policy" => { ".tag" => "owner" },
|
11
|
+
# "shared_link_policy" => { ".tag" => "anyone" }
|
12
|
+
# },
|
13
|
+
# "path_lower" => "/folder_a",
|
14
|
+
# "name" => "folder_a",
|
15
|
+
# "shared_folder_id" => "1231266557",
|
16
|
+
# "time_invited" => "2016-06-04T10:00:35Z"
|
17
|
+
# }
|
18
|
+
# ```
|
16
19
|
class SharedFolder < Base
|
17
20
|
field :access_type, String
|
18
21
|
field :is_team_folder, :boolean
|
@@ -1,9 +1,12 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# Example of a serialized {SharedFolderPolicy} object:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# }
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# "acl_update_policy" => { ".tag" => "owner" },
|
7
|
+
# "shared_link_policy" => { ".tag" => "anyone" }
|
8
|
+
# }
|
9
|
+
# ```
|
7
10
|
class SharedFolderPolicy < Base
|
8
11
|
field :acl_update_policy, Symbol
|
9
12
|
field :shared_link_policy, Symbol
|
@@ -1,26 +1,38 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
2
|
+
class SharedLink < Base
|
3
|
+
VALID_KEYS = [:url, :password]
|
4
|
+
|
5
|
+
def initialize(param)
|
6
|
+
@shared_link =
|
7
|
+
case param
|
8
|
+
when String
|
9
|
+
{:url => param}
|
10
|
+
when Hash
|
11
|
+
param
|
12
|
+
end
|
11
13
|
|
12
|
-
|
14
|
+
check_validity
|
15
|
+
end
|
16
|
+
|
17
|
+
def check_validity
|
18
|
+
if @shared_link[:url].nil?
|
19
|
+
raise ArgumentError, "Missing `:url` option"
|
20
|
+
end
|
13
21
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
DropboxApi::Metadata::FileLink
|
18
|
-
when :folder
|
19
|
-
DropboxApi::Metadata::FolderLink
|
20
|
-
else
|
21
|
-
raise ArgumentError, "Unable to infer resource type for `#{tag}`"
|
22
|
+
@shared_link.keys.each do |key|
|
23
|
+
unless VALID_KEYS.include? key
|
24
|
+
raise ArgumentError, "Invalid option `#{key.inspect}`"
|
22
25
|
end
|
23
26
|
end
|
24
27
|
end
|
28
|
+
|
29
|
+
def to_hash
|
30
|
+
@shared_link
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def valid_keys
|
36
|
+
end
|
25
37
|
end
|
26
38
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# This class is used as an adapter so we can create an object of the pertinent
|
3
|
+
# class when we need to infer the type from the data.
|
4
|
+
#
|
5
|
+
# This same pattern is used in `DropboxApi::Metadata::Resource`
|
6
|
+
class SharedLinkMetadata
|
7
|
+
class << self
|
8
|
+
def new(data)
|
9
|
+
class_for(data[".tag"].to_sym).new(data)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def class_for(tag)
|
15
|
+
case tag
|
16
|
+
when :file
|
17
|
+
DropboxApi::Metadata::FileLinkMetadata
|
18
|
+
when :folder
|
19
|
+
DropboxApi::Metadata::FolderLinkMetadata
|
20
|
+
else
|
21
|
+
raise ArgumentError, "Unable to infer resource type for `#{tag}`"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# Example of a serialized {SpaceAllocation} object:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# ".tag": "individual",
|
7
|
+
# "allocated": 2147483648
|
8
|
+
# }
|
9
|
+
# ```
|
7
10
|
class SpaceAllocation < Base
|
8
11
|
field :allocated, Integer
|
9
12
|
end
|
@@ -1,12 +1,15 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# Example of a serialized {SpaceUsage} object:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# "used": 167685342,
|
7
|
+
# "allocation": {
|
8
|
+
# ".tag": "individual",
|
9
|
+
# "allocated": 2147483648
|
9
10
|
# }
|
11
|
+
# }
|
12
|
+
# ```
|
10
13
|
class SpaceUsage < Base
|
11
14
|
field :used, String
|
12
15
|
field :allocation, DropboxApi::Metadata::SpaceAllocation
|
@@ -1,13 +1,16 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# Example of a serialized {TeamMemberInfo} object:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# "
|
9
|
-
#
|
10
|
-
#
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# "team_info": {
|
7
|
+
# "id": "dbtid:AAFdgehTzw7WlXhZJsbGCLePe8RvQGYDr-I",
|
8
|
+
# "name": "Acme, Inc."
|
9
|
+
# },
|
10
|
+
# "display_name": "Roger Rabbit",
|
11
|
+
# "member_id": "dbmid:abcd1234"
|
12
|
+
# }
|
13
|
+
# ```
|
11
14
|
class TeamMemberInfo < Base
|
12
15
|
field :team_info, DropboxApi::Metadata::Team
|
13
16
|
field :display_name, String
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# This class is used as an adapter so we can create an object of the pertinent
|
3
|
+
# class when we need to infer the type from the data.
|
4
|
+
#
|
5
|
+
# This same pattern is used in `DropboxApi::Metadata::Resource`
|
6
|
+
#
|
7
|
+
# So this could initalize an object of either `ThumbnailBatchResultData`
|
8
|
+
# or `ThumbnailError`.
|
9
|
+
class ThumbnailBatchResultEntry
|
10
|
+
class << self
|
11
|
+
def new(data)
|
12
|
+
case data[".tag"].to_sym
|
13
|
+
when :success
|
14
|
+
DropboxApi::Metadata::ThumbnailBatchResultData.new(data)
|
15
|
+
when :failure
|
16
|
+
DropboxApi::Errors::ThumbnailError.build("Thumbnail generation failed", data["failure"])
|
17
|
+
else
|
18
|
+
raise NotImplementedError, "Unknown result type: #{data[".tag"]}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# Example of a serialized {UploadSessionCursor} object:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# "session_id": "AAAAAAAABCJ61k9yZZtn8Q",
|
7
|
+
# "offset":9
|
8
|
+
# }
|
9
|
+
# ```
|
7
10
|
class UploadSessionCursor < Base
|
8
11
|
field :session_id, String
|
9
12
|
field :offset, Integer
|
@@ -1,18 +1,21 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
# Example of a serialized {MediaInfo} object:
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# "
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
# "
|
14
|
-
# "duration": 6000
|
3
|
+
#
|
4
|
+
# ```json
|
5
|
+
# {
|
6
|
+
# ".tag": "video",
|
7
|
+
# "dimensions": {
|
8
|
+
# "height": 1500,
|
9
|
+
# "width": 1500
|
10
|
+
# },
|
11
|
+
# "location": {
|
12
|
+
# "latitude": 10.123456,
|
13
|
+
# "longitude": 5.123456
|
15
14
|
# }
|
15
|
+
# "time_taken": "2016-09-04T17:00:27Z",
|
16
|
+
# "duration": 6000
|
17
|
+
# }
|
18
|
+
# ```
|
16
19
|
class VideoMetadata < Base
|
17
20
|
field :dimensions, DropboxApi::Metadata::Dimensions, :optional
|
18
21
|
field :location, DropboxApi::Metadata::Location, :optional
|