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,16 @@
1
+ module DropboxApi::Errors
2
+ class AddFolderMemberError < BasicError
3
+ ErrorSubtypes = {
4
+ :access_error => SharedFolderAccessError,
5
+ :email_unverified => EmailUnverifiedError,
6
+ :bad_member => AddMemberSelectorError,
7
+ :cant_share_outside_team => CantShareOutsideTeamError,
8
+ :too_many_members => TooManyMembersError,
9
+ :too_many_pending_invites => TooManyPendingInvitesError,
10
+ :rate_limit => RateLimitError,
11
+ :insufficient_plan => InsufficientPlanError,
12
+ :team_folder => TeamFolderError,
13
+ :no_permission => NoPermissionError
14
+ }.freeze
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ module DropboxApi::Errors
2
+ class AddMemberSelectorError < BasicError
3
+ ErrorSubtypes = {
4
+ :invalid_dropbox_id => InvalidDropboxIdError,
5
+ :invalid_email => InvalidEmailError,
6
+ :unverified_dropbox_id => UnverifiedDropboxId,
7
+ :group_deleted => GroupDeletedError,
8
+ :group_not_on_team => GroupNotOnTeamError
9
+ }.freeze
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class AlreadySharedError < BasicError
3
+ def shared_folder
4
+ DropboxApi::Metadata::SharedFolder.new @metadata
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,83 @@
1
+ module DropboxApi::Errors
2
+ class BasicError < StandardError
3
+ def initialize(message, metadata)
4
+ @metadata = metadata
5
+ super message
6
+ end
7
+
8
+ class << self
9
+ def build(message, metadata)
10
+ subtype, metadata = find_subtype metadata
11
+
12
+ if subtype.nil?
13
+ new message, metadata
14
+ else
15
+ subtype.build message, metadata
16
+ end
17
+ end
18
+
19
+ def find_subtype(metadata)
20
+ if defined? self::ErrorSubtypes
21
+ discriminator = metadata[".tag"]
22
+ metadata = metadata[discriminator] unless metadata[discriminator].nil?
23
+ [self::ErrorSubtypes[discriminator.to_sym], metadata]
24
+ else
25
+ [nil, metadata]
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ class BadPathError < BasicError; end
32
+ class CantCopySharedFolderError < BasicError; end
33
+ class CantMoveFolderIntoItselfError < BasicError; end
34
+ class CantNestSharedFolderError < BasicError; end
35
+ class CantShareOutsideTeamError < BasicError; end
36
+ class ContainsSharedFolderError < BasicError; end
37
+ class DisallowedNameError < BasicError; end
38
+ class DisallowedSharedLinkPolicyError < BasicError; end
39
+ class EmailUnverifiedError < BasicError; end
40
+ class FileAncestorConflictError < BasicError; end
41
+ class FileConflictError < BasicError; end
42
+ class FolderConflictError < BasicError; end
43
+ class GroupDeletedError < BasicError; end
44
+ class GroupNotOnTeamError < BasicError; end
45
+ class InProgressError < BasicError; end
46
+ class InsideAppFolderError < BasicError; end
47
+ class InsideOsxPackageError < BasicError; end
48
+ class InsidePublicFolderError < BasicError; end
49
+ class InsideSharedFolderError < BasicError; end
50
+ class InsufficientPlanError < BasicError; end
51
+ class InsufficientSpaceError < BasicError; end
52
+ class InvalidCursorError < BasicError; end
53
+ class InvalidDropboxIdError < BasicError; end
54
+ class InvalidEmailError < BasicError; end
55
+ class InvalidIdError < BasicError; end
56
+ class InvalidPathError < BasicError; end
57
+ class InvalidRevisionError < BasicError; end
58
+ class InvalidSettingsError < BasicError; end
59
+ class IsAppFolderError < BasicError; end
60
+ class IsFileError < BasicError; end
61
+ class IsOsxPackageError < BasicError; end
62
+ class IsPublicFolderError < BasicError; end
63
+ class MalformedPathError < BasicError; end
64
+ class NoAccountError < BasicError; end
65
+ class NoPermissionError < BasicError; end
66
+ class NoWritePermissionError < BasicError; end
67
+ class NotAMemberError < BasicError; end
68
+ class NotFileError < BasicError; end
69
+ class NotFolderError < BasicError; end
70
+ class NotFoundError < BasicError; end
71
+ class RateLimitError < BasicError; end
72
+ class RestrictedContentError < BasicError; end
73
+ class SharedLinkAlreadyExistsError < BasicError; end
74
+ class TeamFolderError < BasicError; end
75
+ class TeamPolicyDisallowsMemberPolicyError < BasicError; end
76
+ class TooManyFilesError < BasicError; end
77
+ class TooManyMembersError < BasicError; end
78
+ class TooManyPendingInvitesError < BasicError; end
79
+ class UnmountedError < BasicError; end
80
+ class UnsupportedContentError < BasicError; end
81
+ class UnsupportedExtensionError < BasicError; end
82
+ class UnverifiedDropboxId < BasicError; end
83
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class CreateFolderError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => WriteError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ module DropboxApi::Errors
2
+ class CreateSharedLinkWithSettingsError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => LookupError,
5
+ :email_not_verified => EmailUnverifiedError,
6
+ :shared_link_already_exists => SharedLinkAlreadyExistsError,
7
+ :settings_error => SettingsError,
8
+ :access_denied => NoPermissionError
9
+ }.freeze
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ module DropboxApi::Errors
2
+ class DeleteError < BasicError
3
+ ErrorSubtypes = {
4
+ :path_lookup => LookupError,
5
+ :path_write => WriteError
6
+ }.freeze
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class DownloadError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => LookupError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class GetAccountError < BasicError
3
+ ErrorSubtypes = {
4
+ :no_account => NoAccountError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class GetMetadataError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => LookupError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ module DropboxApi
2
+ module Errors
3
+ class HttpError < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ module DropboxApi::Errors
2
+ class ListFolderContinueError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => WriteError,
5
+ :reset => InvalidCursorError
6
+ }.freeze
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class ListFolderError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => LookupError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class ListFolderLongpollError < BasicError
3
+ ErrorSubtypes = {
4
+ :reset => InvalidCursorError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class ListRevisionsError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => LookupError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module DropboxApi::Errors
2
+ class ListSharedLinksError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => LookupError,
5
+ :reset => InvalidCursorError
6
+ }.freeze
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ module DropboxApi::Errors
2
+ class LookupError < BasicError
3
+ ErrorSubtypes = {
4
+ :malformed_path => MalformedPathError,
5
+ :not_found => NotFoundError,
6
+ :not_file => NotFileError,
7
+ :not_folder => NotFolderError,
8
+ :restricted_content => RestrictedContentError
9
+ }.freeze
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module DropboxApi::Errors
2
+ class PreviewError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => LookupError,
5
+ :in_progress => InProgressError,
6
+ :unsupported_extension => UnsupportedExtensionError,
7
+ :unsupported_content => UnsupportedContentError
8
+ }.freeze
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module DropboxApi::Errors
2
+ class RelocationError < BasicError
3
+ ErrorSubtypes = {
4
+ :from_lookup => LookupError,
5
+ :from_write => WriteError,
6
+ :to => WriteError,
7
+ :cant_copy_shared_folder => CantCopySharedFolderError,
8
+ :cant_nest_shared_folder => CantNestSharedFolderError,
9
+ :cant_move_folder_into_itself => CantMoveFolderIntoItselfError,
10
+ :too_many_files => TooManyFilesError
11
+ }.freeze
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module DropboxApi::Errors
2
+ class RestoreError < BasicError
3
+ ErrorSubtypes = {
4
+ :path_lookup => LookupError,
5
+ :path_write => WriteError,
6
+ :invalid_revision => InvalidRevisionError
7
+ }.freeze
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class SearchError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => LookupError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module DropboxApi::Errors
2
+ class SettingsError < BasicError
3
+ ErrorSubtypes = {
4
+ :invalid_settings => InvalidSettingsError,
5
+ :not_authorized => NoPermissionError
6
+ }.freeze
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ module DropboxApi::Errors
2
+ class ShareFolderError < BasicError
3
+ ErrorSubtypes = {
4
+ :email_unverified => EmailUnverifiedError,
5
+ :bad_path => SharePathError,
6
+ :team_policy_disallows_member_policy => TeamPolicyDisallowsMemberPolicyError,
7
+ :disallowed_shared_link_policy => DisallowedSharedLinkPolicyError,
8
+ :no_permission => NoPermissionError
9
+ }.freeze
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ module DropboxApi::Errors
2
+ class SharePathError < BasicError
3
+ ErrorSubtypes = {
4
+ :is_file => IsFileError,
5
+ :inside_shared_folder => InsideSharedFolderError,
6
+ :contains_shared_folder => ContainsSharedFolderError,
7
+ :is_app_folder => IsAppFolderError,
8
+ :inside_app_folder => InsideAppFolderError,
9
+ :is_public_folder => IsPublicFolderError,
10
+ :inside_public_folder => InsidePublicFolderError,
11
+ :already_shared => AlreadySharedError,
12
+ :invalid_path => InvalidPathError,
13
+ :is_osx_package => IsOsxPackageError,
14
+ :inside_osx_package => InsideOsxPackageError,
15
+ }.freeze
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ module DropboxApi::Errors
2
+ class SharedFolderAccessError < BasicError
3
+ ErrorSubtypes = {
4
+ :invalid_id => InvalidIdError,
5
+ :not_a_member => NotAMemberError,
6
+ :email_unverified => EmailUnverifiedError,
7
+ :unmounted => UnmountedError
8
+ }.freeze
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class UploadError < BasicError
3
+ ErrorSubtypes = {
4
+ :path => UploadWriteFailedError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module DropboxApi::Errors
2
+ class UploadWriteFailedError < BasicError
3
+ ErrorSubtypes = {
4
+ :reason => WriteError
5
+ }.freeze
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ module DropboxApi::Errors
2
+ class WriteConflictError < BasicError
3
+ ErrorSubtypes = {
4
+ :file => FileConflictError,
5
+ :folder => FolderConflictError,
6
+ :file_ancestor => FileAncestorConflictError
7
+ }
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ module DropboxApi::Errors
2
+ class WriteError < BasicError
3
+ ErrorSubtypes = {
4
+ :malformed_path => MalformedPathError,
5
+ :conflict => WriteConflictError,
6
+ :no_write_permission => NoWritePermissionError,
7
+ :insufficient_space => InsufficientSpaceError,
8
+ :disallowed_name => DisallowedNameError
9
+ }
10
+ end
11
+ end
@@ -0,0 +1,62 @@
1
+ module DropboxApi::Metadata
2
+ # Examples of serialized `AddMember` objects:
3
+ #
4
+ # {
5
+ # "member": {
6
+ # ".tag": "email",
7
+ # "email": "justin@example.com"
8
+ # },
9
+ # "access_level": {
10
+ # ".tag": "editor"
11
+ # }
12
+ # },
13
+ # {
14
+ # "member": {
15
+ # ".tag": "dropbox_id",
16
+ # "dropbox_id": "dbid:AAEufNrMPSPe0dMQijRP0N_aZtBJRm26W4Q"
17
+ # },
18
+ # "access_level": {
19
+ # ".tag": "viewer"
20
+ # }
21
+ # }
22
+ class AddMember
23
+ # Builds an AddMember object that can be used as an argument for
24
+ # `add_folder_member`.
25
+ #
26
+ # @param member [String] Email address or Dropbox ID.
27
+ # @param acl [:editor, :viewer] Access level, defaults to :editor.
28
+ def initialize(member, acl = :editor)
29
+ @member = member
30
+ @acl = acl
31
+ end
32
+
33
+ def to_hash
34
+ {
35
+ :member => member_to_hash,
36
+ :access_level => acl_to_hash
37
+ }
38
+ end
39
+
40
+ private
41
+
42
+ def member_to_hash
43
+ if @member.start_with? "dbid:"
44
+ {
45
+ :".tag" => :dropbox_id,
46
+ :dropbox_id => @member
47
+ }
48
+ else
49
+ {
50
+ :".tag" => :email,
51
+ :email => @member
52
+ }
53
+ end
54
+ end
55
+
56
+ def acl_to_hash
57
+ {
58
+ :".tag" => @acl
59
+ }
60
+ end
61
+ end
62
+ end