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.
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