dropbox_api 0.1.0

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