dropbox_api 0.1.10 → 0.1.11

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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -12
  3. data/RELEASING.md +5 -0
  4. data/api_coverage.md +9 -0
  5. data/lib/dropbox_api.rb +23 -4
  6. data/lib/dropbox_api/chunked_uploader.rb +48 -0
  7. data/lib/dropbox_api/endpoints/content_upload.rb +16 -9
  8. data/lib/dropbox_api/endpoints/file_requests/create_file_request.rb +21 -0
  9. data/lib/dropbox_api/endpoints/files/get_metadata.rb +1 -1
  10. data/lib/dropbox_api/endpoints/files/get_thumbnail.rb +4 -4
  11. data/lib/dropbox_api/endpoints/files/get_thumbnail_batch.rb +38 -0
  12. data/lib/dropbox_api/endpoints/files/list_folder.rb +16 -1
  13. data/lib/dropbox_api/endpoints/files/list_folder_get_latest_cursor.rb +8 -9
  14. data/lib/dropbox_api/endpoints/files/list_folder_longpoll.rb +1 -1
  15. data/lib/dropbox_api/endpoints/files/list_revisions.rb +1 -1
  16. data/lib/dropbox_api/endpoints/files/move.rb +2 -2
  17. data/lib/dropbox_api/endpoints/files/save_url_check_job_status.rb +1 -1
  18. data/lib/dropbox_api/endpoints/files/search.rb +1 -1
  19. data/lib/dropbox_api/endpoints/files/upload.rb +17 -27
  20. data/lib/dropbox_api/endpoints/files/upload_session_append_v2.rb +7 -5
  21. data/lib/dropbox_api/endpoints/files/upload_session_finish.rb +5 -3
  22. data/lib/dropbox_api/endpoints/files/upload_session_start.rb +3 -3
  23. data/lib/dropbox_api/endpoints/rpc_content.rb +9 -0
  24. data/lib/dropbox_api/endpoints/sharing/add_file_member.rb +6 -6
  25. data/lib/dropbox_api/endpoints/sharing/add_folder_member.rb +5 -5
  26. data/lib/dropbox_api/endpoints/sharing/create_shared_link_with_settings.rb +2 -2
  27. data/lib/dropbox_api/endpoints/sharing/list_folder_members.rb +1 -1
  28. data/lib/dropbox_api/endpoints/sharing/list_shared_links.rb +1 -1
  29. data/lib/dropbox_api/endpoints/sharing/share_folder.rb +1 -1
  30. data/lib/dropbox_api/endpoints/virtual/upload_by_chunks.rb +49 -0
  31. data/lib/dropbox_api/errors/basic_error.rb +2 -0
  32. data/lib/dropbox_api/errors/create_file_request_error.rb +6 -0
  33. data/lib/dropbox_api/errors/thumbnail_batch_error.rb +7 -0
  34. data/lib/dropbox_api/errors/thumbnail_error.rb +10 -0
  35. data/lib/dropbox_api/metadata/access_level.rb +7 -4
  36. data/lib/dropbox_api/metadata/add_file_member_result.rb +13 -10
  37. data/lib/dropbox_api/metadata/add_member.rb +19 -16
  38. data/lib/dropbox_api/metadata/basic_account.rb +18 -15
  39. data/lib/dropbox_api/metadata/commit_info.rb +35 -1
  40. data/lib/dropbox_api/metadata/deleted.rb +9 -6
  41. data/lib/dropbox_api/metadata/file.rb +18 -15
  42. data/lib/dropbox_api/metadata/file_link_metadata.rb +48 -0
  43. data/lib/dropbox_api/metadata/file_member_action.rb +8 -5
  44. data/lib/dropbox_api/metadata/file_request.rb +30 -0
  45. data/lib/dropbox_api/metadata/folder.rb +9 -6
  46. data/lib/dropbox_api/metadata/{folder_link.rb → folder_link_metadata.rb} +1 -1
  47. data/lib/dropbox_api/metadata/folder_sharing_info.rb +7 -4
  48. data/lib/dropbox_api/metadata/link_permissions.rb +11 -8
  49. data/lib/dropbox_api/metadata/media_info.rb +14 -7
  50. data/lib/dropbox_api/metadata/media_metadata.rb +14 -12
  51. data/lib/dropbox_api/metadata/member.rb +12 -9
  52. data/lib/dropbox_api/metadata/member_action.rb +13 -10
  53. data/lib/dropbox_api/metadata/member_permission.rb +11 -8
  54. data/lib/dropbox_api/metadata/member_permission_list.rb +19 -17
  55. data/lib/dropbox_api/metadata/name.rb +9 -6
  56. data/lib/dropbox_api/metadata/photo_metadata.rb +14 -11
  57. data/lib/dropbox_api/metadata/resource.rb +1 -1
  58. data/lib/dropbox_api/metadata/shared_folder.rb +16 -13
  59. data/lib/dropbox_api/metadata/shared_folder_policy.rb +7 -4
  60. data/lib/dropbox_api/metadata/shared_link.rb +30 -18
  61. data/lib/dropbox_api/metadata/shared_link_metadata.rb +26 -0
  62. data/lib/dropbox_api/metadata/space_allocation.rb +7 -4
  63. data/lib/dropbox_api/metadata/space_usage.rb +9 -6
  64. data/lib/dropbox_api/metadata/{symbol.rb → tag.rb} +1 -1
  65. data/lib/dropbox_api/metadata/team_member_info.rb +11 -8
  66. data/lib/dropbox_api/metadata/thumbnail_batch_result_data.rb +6 -0
  67. data/lib/dropbox_api/metadata/thumbnail_batch_result_entry.rb +23 -0
  68. data/lib/dropbox_api/metadata/upload_session_cursor.rb +7 -4
  69. data/lib/dropbox_api/metadata/video_metadata.rb +15 -12
  70. data/lib/dropbox_api/metadata/write_mode.rb +3 -3
  71. data/lib/dropbox_api/{endpoints/options_validator.rb → options_validator.rb} +1 -1
  72. data/lib/dropbox_api/results/add_file_member_result_list.rb +1 -1
  73. data/lib/dropbox_api/results/get_thumbnail_batch_result.rb +9 -0
  74. data/lib/dropbox_api/results/list_shared_links_result.rb +1 -1
  75. data/lib/dropbox_api/version.rb +1 -1
  76. metadata +20 -6
  77. 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
- # - +:leave_a_copy+: Allow the member to keep a copy of the folder when
4
+ # - `:leave_a_copy`: Allow the member to keep a copy of the folder when
5
5
  # removing.
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
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
- # - +:remove+: Remove the member from the folder.
11
+ # - `:remove`: Remove the member from the folder.
12
12
  #
13
13
  # Example of a serialized {MemberAction} object:
14
- # {
15
- # ".tag": "leave_a_copy"
16
- # }
17
- class MemberAction < DropboxApi::Metadata::Symbol
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
- # "action": {
5
- # ".tag": "remove"
6
- # },
7
- # "allow": false,
8
- # "reason": {
9
- # ".tag": "target_is_self"
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
- # "action": {
8
- # ".tag": "remove"
9
- # },
10
- # "allow": false,
11
- # "reason": {
12
- # ".tag": "target_is_self"
13
- # }
14
- # }, {
15
- # "action": {
16
- # ".tag": "make_owner"
17
- # },
18
- # "allow": false,
19
- # "reason": {
20
- # ".tag": "target_is_self"
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
- # "given_name": "Franz",
5
- # "surname": "Ferdinand",
6
- # "familiar_name": "Franz",
7
- # "display_name": "Franz Ferdinand (Personal)"
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
- # ".tag": "photo",
5
- # "dimensions": {
6
- # "height": 1500,
7
- # "width": 1500
8
- # },
9
- # "location": {
10
- # "latitude": 10.123456,
11
- # "longitude": 5.123456
12
- # }
13
- # "time_taken": "2016-09-04T17:00:27Z"
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 +Resource.new({".tag" => "file", :name => ...})+ will
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
- # ".tag" => "complete",
5
- # "access_type" => {".tag"=>"owner"},
6
- # "is_team_folder" => false,
7
- # "policy" => {
8
- # "acl_update_policy" => { ".tag" => "owner" },
9
- # "shared_link_policy" => { ".tag" => "anyone" }
10
- # },
11
- # "path_lower" => "/folder_a",
12
- # "name" => "folder_a",
13
- # "shared_folder_id" => "1231266557",
14
- # "time_invited" => "2016-06-04T10:00:35Z"
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
- # "acl_update_policy" => { ".tag" => "owner" },
5
- # "shared_link_policy" => { ".tag" => "anyone" }
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
- # 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 SharedLink
7
- class << self
8
- def new(data)
9
- class_for(data[".tag"].to_sym).new(data)
10
- end
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
- private
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
- def class_for(tag)
15
- case tag
16
- when :file
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
- # ".tag": "individual",
5
- # "allocated": 2147483648
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
- # "used": 167685342,
5
- # "allocation": {
6
- # ".tag": "individual",
7
- # "allocated": 2147483648
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,5 +1,5 @@
1
1
  module DropboxApi::Metadata
2
- class Symbol < DropboxApi::Metadata::Base
2
+ class Tag < DropboxApi::Metadata::Base
3
3
  def self.new(data)
4
4
  case data
5
5
  when ::Symbol
@@ -1,13 +1,16 @@
1
1
  module DropboxApi::Metadata
2
2
  # Example of a serialized {TeamMemberInfo} object:
3
- # {
4
- # "team_info": {
5
- # "id": "dbtid:AAFdgehTzw7WlXhZJsbGCLePe8RvQGYDr-I",
6
- # "name": "Acme, Inc."
7
- # },
8
- # "display_name": "Roger Rabbit",
9
- # "member_id": "dbmid:abcd1234"
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,6 @@
1
+ module DropboxApi::Metadata
2
+ class ThumbnailBatchResultData < Base
3
+ field :metadata, DropboxApi::Metadata::File
4
+ field :thumbnail, String
5
+ end
6
+ end
@@ -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
- # "session_id": "AAAAAAAABCJ61k9yZZtn8Q",
5
- # "offset":9
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
- # ".tag": "video",
5
- # "dimensions": {
6
- # "height": 1500,
7
- # "width": 1500
8
- # },
9
- # "location": {
10
- # "latitude": 10.123456,
11
- # "longitude": 5.123456
12
- # }
13
- # "time_taken": "2016-09-04T17:00:27Z",
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