dropbox_api 0.1.1 → 0.1.3
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.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/CHANGES.md +7 -0
- data/README.md +37 -12
- data/TODO.md +33 -3
- data/api_coverage.md +8 -6
- data/api_reference.md +25 -0
- data/lib/dropbox_api.rb +25 -1
- data/lib/dropbox_api/authenticator.rb +5 -9
- data/lib/dropbox_api/endpoints/base.rb +11 -0
- data/lib/dropbox_api/endpoints/files/get_thumbnail.rb +30 -6
- data/lib/dropbox_api/endpoints/files/upload.rb +18 -6
- data/lib/dropbox_api/endpoints/sharing/add_file_member.rb +60 -0
- data/lib/dropbox_api/endpoints/sharing/add_folder_member.rb +11 -8
- data/lib/dropbox_api/endpoints/sharing/list_folder_members.rb +16 -6
- data/lib/dropbox_api/endpoints/users/get_account_batch.rb +19 -0
- data/lib/dropbox_api/endpoints/users/get_current_account.rb +16 -0
- data/lib/dropbox_api/endpoints/users/get_space_usage.rb +16 -0
- data/lib/dropbox_api/errors/add_file_member_error.rb +6 -0
- data/lib/dropbox_api/errors/basic_error.rb +3 -0
- data/lib/dropbox_api/errors/file_member_action_error.rb +10 -0
- data/lib/dropbox_api/errors/sharing_file_access_error.rb +11 -0
- data/lib/dropbox_api/errors/too_many_requests_error.rb +19 -0
- data/lib/dropbox_api/metadata/access_level.rb +18 -0
- data/lib/dropbox_api/metadata/add_file_member_result.rb +19 -0
- data/lib/dropbox_api/metadata/add_member.rb +26 -54
- data/lib/dropbox_api/metadata/base.rb +53 -10
- data/lib/dropbox_api/metadata/basic_account.rb +19 -20
- data/lib/dropbox_api/metadata/deleted.rb +7 -8
- data/lib/dropbox_api/metadata/field.rb +3 -2
- data/lib/dropbox_api/metadata/file.rb +20 -17
- data/lib/dropbox_api/metadata/file_link.rb +26 -27
- data/lib/dropbox_api/metadata/file_member_action.rb +30 -0
- data/lib/dropbox_api/metadata/folder.rb +11 -8
- data/lib/dropbox_api/metadata/folder_sharing_info.rb +5 -6
- data/lib/dropbox_api/metadata/link_permissions.rb +9 -10
- data/lib/dropbox_api/metadata/member.rb +47 -0
- data/lib/dropbox_api/metadata/member_action_collection.rb +44 -0
- data/lib/dropbox_api/metadata/member_permission.rb +7 -0
- data/lib/dropbox_api/metadata/member_permission_list.rb +7 -0
- data/lib/dropbox_api/metadata/name.rb +7 -8
- data/lib/dropbox_api/metadata/parent_folder_access_info.rb +7 -0
- data/lib/dropbox_api/metadata/shared_folder.rb +14 -15
- data/lib/dropbox_api/metadata/shared_folder_policy.rb +5 -6
- data/lib/dropbox_api/metadata/space_allocation.rb +10 -0
- data/lib/dropbox_api/metadata/space_usage.rb +14 -0
- data/lib/dropbox_api/metadata/team_member_info.rb +9 -10
- data/lib/dropbox_api/result_builder.rb +1 -1
- data/lib/dropbox_api/results/add_file_member_result_list.rb +20 -0
- data/lib/dropbox_api/results/basic_account_batch.rb +7 -0
- data/lib/dropbox_api/version.rb +1 -1
- data/rails_setup.md +84 -0
- metadata +26 -2
@@ -7,7 +7,7 @@ module DropboxApi::Endpoints::Sharing
|
|
7
7
|
|
8
8
|
include DropboxApi::Endpoints::OptionsValidator
|
9
9
|
|
10
|
-
# @method add_folder_member(folder_id, members, options)
|
10
|
+
# @method add_folder_member(folder_id, members, options = {})
|
11
11
|
# Allows an owner or editor (if the ACL update policy allows) of a shared
|
12
12
|
# folder to add another member.
|
13
13
|
#
|
@@ -16,16 +16,19 @@ module DropboxApi::Endpoints::Sharing
|
|
16
16
|
#
|
17
17
|
# Apps must have full Dropbox access to use this endpoint.
|
18
18
|
#
|
19
|
+
# The +members+ parameter must be an Array. Each item in the array could
|
20
|
+
# be either a String or a {Metadata::AddMember} object.
|
21
|
+
#
|
19
22
|
# @param folder_id [String] The ID for the shared folder.
|
20
23
|
# @param members [Array<AddMember,String>] The intended list of members to
|
21
24
|
# add. Added members will receive invites to join the shared folder.
|
22
|
-
# @option quiet [Boolean] Whether added members should be notified
|
23
|
-
# email and device notifications of their invite. The default for
|
24
|
-
# field is False.
|
25
|
-
# @option custom_message [String] Optional message to display to
|
26
|
-
# members in their invitation. This field is optional.
|
25
|
+
# @option options quiet [Boolean] Whether added members should be notified
|
26
|
+
# via email and device notifications of their invite. The default for
|
27
|
+
# this field is False.
|
28
|
+
# @option options custom_message [String] Optional message to display to
|
29
|
+
# added members in their invitation. This field is optional.
|
30
|
+
# @see DropboxApi::Metadata::Member
|
27
31
|
add_endpoint :add_folder_member do |folder_id, members, options = {}|
|
28
|
-
# TODO: It should be possible to take an email (String) as the argument.
|
29
32
|
validate_options([:quiet, :custom_message], options)
|
30
33
|
options[:quiet] ||= false
|
31
34
|
options[:custom_message] ||= nil
|
@@ -42,7 +45,7 @@ module DropboxApi::Endpoints::Sharing
|
|
42
45
|
members.map do |member|
|
43
46
|
case member
|
44
47
|
when String
|
45
|
-
DropboxApi::Metadata::AddMember.
|
48
|
+
DropboxApi::Metadata::AddMember.build_from_string member
|
46
49
|
when DropboxApi::Metadata::AddMember
|
47
50
|
member
|
48
51
|
else
|
@@ -7,24 +7,34 @@ module DropboxApi::Endpoints::Sharing
|
|
7
7
|
|
8
8
|
include DropboxApi::Endpoints::OptionsValidator
|
9
9
|
|
10
|
-
# @method list_folder_members(folder_id, actions, options)
|
10
|
+
# @method list_folder_members(folder_id, actions = [], options = {})
|
11
11
|
# Returns shared folder membership by its folder ID.
|
12
12
|
#
|
13
13
|
# Apps must have full Dropbox access to use this endpoint.
|
14
14
|
#
|
15
|
+
# @example List folder members.
|
16
|
+
# client.list_folder_members "1231273663"
|
17
|
+
#
|
18
|
+
# @example List folder members, with detail of permission to make owner.
|
19
|
+
# client.list_folder_members "1231273663", [:make_owner]
|
20
|
+
#
|
15
21
|
# @param folder_id [String] The ID for the shared folder.
|
16
|
-
# @
|
22
|
+
# @param actions [Array]
|
23
|
+
# This is an optional list of actions. The permissions for the actions
|
24
|
+
# requested will be included in the result.
|
25
|
+
# @option options
|
26
|
+
# limit [Numeric] The maximum number of results that include
|
17
27
|
# members, groups and invitees to return per request. The default for
|
18
28
|
# this field is 1000.
|
19
29
|
# @return [SharedFolderMembers] Shared folder user and group membership.
|
20
|
-
|
21
|
-
|
22
|
-
# been implemented.
|
30
|
+
# @see DropboxApi::Metadata::MemberActionCollection
|
31
|
+
add_endpoint :list_folder_members do |folder_id, actions = [], options = {}|
|
23
32
|
validate_options([:limit], options)
|
24
33
|
options[:limit] ||= 100
|
25
34
|
|
26
35
|
perform_request options.merge({
|
27
|
-
:shared_folder_id => folder_id
|
36
|
+
:shared_folder_id => folder_id,
|
37
|
+
:actions => DropboxApi::Metadata::MemberActionCollection.new(actions)
|
28
38
|
})
|
29
39
|
end
|
30
40
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module DropboxApi::Endpoints::Users
|
2
|
+
class GetAccountBatch < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/users/get_account_batch".freeze
|
5
|
+
ResultType = DropboxApi::Results::BasicAccountBatch
|
6
|
+
ErrorType = DropboxApi::Errors::GetAccountError
|
7
|
+
|
8
|
+
# @method get_account_batch(account_ids)
|
9
|
+
# Get information about multiple user accounts. At most 300 accounts may
|
10
|
+
# be queried per request.
|
11
|
+
#
|
12
|
+
# @param account_ids [Array<String>] List of user account identifiers. Should not
|
13
|
+
# contain any duplicate account IDs.
|
14
|
+
# @return [Array<BasicAccount>] Basic information about any account.
|
15
|
+
add_endpoint :get_account_batch do |account_ids|
|
16
|
+
perform_request :account_ids => account_ids
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DropboxApi::Endpoints::Users
|
2
|
+
class GetCurrentAccount < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/users/get_current_account".freeze
|
5
|
+
ResultType = DropboxApi::Metadata::BasicAccount
|
6
|
+
ErrorType = nil
|
7
|
+
|
8
|
+
# @method get_current_account
|
9
|
+
# Get information about the current user's account.
|
10
|
+
#
|
11
|
+
# @return [BasicAccount] Detailed information about the current user's account.
|
12
|
+
add_endpoint :get_current_account do
|
13
|
+
perform_request nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DropboxApi::Endpoints::Users
|
2
|
+
class GetSpaceUsage < DropboxApi::Endpoints::Rpc
|
3
|
+
Method = :post
|
4
|
+
Path = "/2/users/get_space_usage".freeze
|
5
|
+
ResultType = DropboxApi::Metadata::SpaceUsage
|
6
|
+
ErrorType = nil
|
7
|
+
|
8
|
+
# @method get_space_usage
|
9
|
+
# Get the space usage information for the current user's account.
|
10
|
+
#
|
11
|
+
# @return [SpaceUsage] Information about a user's space usage and quota.
|
12
|
+
add_endpoint :get_space_usage do
|
13
|
+
perform_request nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -52,12 +52,15 @@ module DropboxApi::Errors
|
|
52
52
|
class InvalidCursorError < BasicError; end
|
53
53
|
class InvalidDropboxIdError < BasicError; end
|
54
54
|
class InvalidEmailError < BasicError; end
|
55
|
+
class InvalidFileError < BasicError; end
|
55
56
|
class InvalidIdError < BasicError; end
|
57
|
+
class InvalidMemberError < BasicError; end
|
56
58
|
class InvalidPathError < BasicError; end
|
57
59
|
class InvalidRevisionError < BasicError; end
|
58
60
|
class InvalidSettingsError < BasicError; end
|
59
61
|
class IsAppFolderError < BasicError; end
|
60
62
|
class IsFileError < BasicError; end
|
63
|
+
class IsFolderError < BasicError; end
|
61
64
|
class IsOsxPackageError < BasicError; end
|
62
65
|
class IsPublicFolderError < BasicError; end
|
63
66
|
class MalformedPathError < BasicError; end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module DropboxApi::Errors
|
2
|
+
class FileMemberActionError < BasicError
|
3
|
+
ErrorSubtypes = {
|
4
|
+
:invalid_member => InvalidMemberError,
|
5
|
+
:no_permission => NoPermissionError,
|
6
|
+
:access_error => SharingFileAccessError,
|
7
|
+
:no_explicit_access => DropboxApi::Metadata::ParentFolderAccessInfo
|
8
|
+
}.freeze
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module DropboxApi::Errors
|
2
|
+
class SharingFileAccessError < BasicError
|
3
|
+
ErrorSubtypes = {
|
4
|
+
:no_permission => NoPermissionError,
|
5
|
+
:invalid_file => InvalidFileError,
|
6
|
+
:is_folder => IsFolderError,
|
7
|
+
:inside_public_folder => InsidePublicFolderError,
|
8
|
+
:inside_osx_package => InsideOsxPackageError
|
9
|
+
}.freeze
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module DropboxApi::Errors
|
2
|
+
class TooManyRequestsError < BasicError; end
|
3
|
+
class TooManyWriteOperationsError < TooManyRequestsError; end
|
4
|
+
|
5
|
+
class TooManyRequestsError
|
6
|
+
attr_accessor :retry_after
|
7
|
+
|
8
|
+
def self.build(message, metadata)
|
9
|
+
subtype, metadata = find_subtype metadata
|
10
|
+
|
11
|
+
subtype.new(message, metadata)
|
12
|
+
end
|
13
|
+
|
14
|
+
ErrorSubtypes = {
|
15
|
+
:too_many_requests => TooManyRequestsError,
|
16
|
+
:too_many_write_operations => TooManyWriteOperationsError
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# Example of a serialized {AccessLevel} object:
|
3
|
+
# {
|
4
|
+
# ".tag": "viewer"
|
5
|
+
# }
|
6
|
+
class AccessLevel < Base
|
7
|
+
def self.new(data)
|
8
|
+
case data
|
9
|
+
when Symbol
|
10
|
+
data
|
11
|
+
when Hash
|
12
|
+
data[".tag"].to_sym
|
13
|
+
else
|
14
|
+
raise ArgumentError, "Invalid value for AccessLevel: #{data.inspect}."
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# Example of a {AddFileMemberResult}:
|
3
|
+
# {
|
4
|
+
# "member":{
|
5
|
+
# ".tag": "email",
|
6
|
+
# "email": "somebody@test.com"
|
7
|
+
# },
|
8
|
+
# "result": {
|
9
|
+
# ".tag": "success",
|
10
|
+
# "success": {
|
11
|
+
# ".tag": "viewer"
|
12
|
+
# }
|
13
|
+
# }
|
14
|
+
# }
|
15
|
+
class AddFileMemberResult < Base
|
16
|
+
field :member, DropboxApi::Metadata::Member
|
17
|
+
field :result, DropboxApi::Metadata::FileMemberAction
|
18
|
+
end
|
19
|
+
end
|
@@ -1,62 +1,34 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
|
-
# Examples of serialized
|
3
|
-
#
|
4
|
-
# {
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
2
|
+
# Examples of serialized {AddMember} objects:
|
3
|
+
# {
|
4
|
+
# "member": {
|
5
|
+
# ".tag": "email",
|
6
|
+
# "email": "justin@example.com"
|
7
|
+
# },
|
8
|
+
# "access_level": {
|
9
|
+
# ".tag": "editor"
|
10
|
+
# }
|
8
11
|
# },
|
9
|
-
#
|
10
|
-
# "
|
12
|
+
# {
|
13
|
+
# "member": {
|
14
|
+
# ".tag": "dropbox_id",
|
15
|
+
# "dropbox_id": "dbid:AAEufNrMPSPe0dMQijRP0N_aZtBJRm26W4Q"
|
16
|
+
# },
|
17
|
+
# "access_level": {
|
18
|
+
# ".tag": "viewer"
|
19
|
+
# }
|
11
20
|
# }
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
-
}
|
21
|
+
class AddMember < Base
|
22
|
+
class << self
|
23
|
+
def build_from_string(member, access_level = :editor)
|
24
|
+
new({
|
25
|
+
"member" => Member.build_from_email_or_dropbox_id(member),
|
26
|
+
"access_level" => access_level
|
27
|
+
})
|
53
28
|
end
|
54
29
|
end
|
55
30
|
|
56
|
-
|
57
|
-
|
58
|
-
:".tag" => @acl
|
59
|
-
}
|
60
|
-
end
|
31
|
+
field :member, DropboxApi::Metadata::Member
|
32
|
+
field :access_level, DropboxApi::Metadata::AccessLevel
|
61
33
|
end
|
62
34
|
end
|
@@ -1,22 +1,65 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
2
|
class Base
|
3
|
-
|
4
|
-
|
5
|
-
@fields[name] = DropboxApi::Metadata::Field.new(type, options)
|
3
|
+
class << self
|
4
|
+
attr_reader :fields
|
6
5
|
|
7
|
-
|
8
|
-
|
6
|
+
def field(name, type, *options)
|
7
|
+
@fields ||= {}
|
8
|
+
@fields[name] = DropboxApi::Metadata::Field.new(type, options)
|
9
9
|
|
10
|
-
|
11
|
-
@fields.each do |name, field|
|
12
|
-
yield name, field
|
10
|
+
attr_reader name
|
13
11
|
end
|
14
12
|
end
|
15
13
|
|
14
|
+
# Takes in a hash containing all the attributes required to initialize the
|
15
|
+
# object.
|
16
|
+
#
|
17
|
+
# Each hash entry should have a key which identifies a field and its value,
|
18
|
+
# so a valid call would be something like this:
|
19
|
+
#
|
20
|
+
# DropboxApi::Metadata::File.new({
|
21
|
+
# "name" => "a.jpg",
|
22
|
+
# "path_lower" => "/a.jpg",
|
23
|
+
# "path_display" => "/a.jpg",
|
24
|
+
# "id" => "id:evvfE6q6cK0AAAAAAAAB2w",
|
25
|
+
# "client_modified" => "2016-10-19T17:17:34Z",
|
26
|
+
# "server_modified" => "2016-10-19T17:17:34Z",
|
27
|
+
# "rev" => "28924061bdd",
|
28
|
+
# "size" => 396317
|
29
|
+
# })
|
30
|
+
#
|
31
|
+
# @raise [ArgumentError] If a required attribute is missing.
|
32
|
+
# @param metadata [Hash]
|
16
33
|
def initialize(metadata)
|
17
|
-
self.class.
|
18
|
-
|
34
|
+
self.class.fields.keys.each do |field_name|
|
35
|
+
self[field_name] = metadata[field_name.to_s]
|
19
36
|
end
|
20
37
|
end
|
38
|
+
|
39
|
+
def to_hash
|
40
|
+
Hash[self.class.fields.keys.map do |field_name|
|
41
|
+
[field_name.to_s, serialized_field(field_name)]
|
42
|
+
end.select { |k, v| !v.nil? }]
|
43
|
+
end
|
44
|
+
|
45
|
+
def serialized_field(field_name)
|
46
|
+
value = send field_name
|
47
|
+
case value
|
48
|
+
when Time
|
49
|
+
value.utc.strftime("%FT%TZ")
|
50
|
+
when DropboxApi::Metadata
|
51
|
+
value.to_hash
|
52
|
+
else
|
53
|
+
value
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def []=(name, value)
|
60
|
+
instance_variable_set "@#{name}", self.class.fields[name].cast(value)
|
61
|
+
rescue ArgumentError
|
62
|
+
raise ArgumentError, "Invalid value for `#{name}`: #{value.inspect}."
|
63
|
+
end
|
21
64
|
end
|
22
65
|
end
|
@@ -1,29 +1,28 @@
|
|
1
1
|
module DropboxApi::Metadata
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
# }
|
2
|
+
# Example of a serialized {BasicAccount} object:
|
3
|
+
# {
|
4
|
+
# "account_id": "dbid:AAH4f99T0taONIb-OurWxbNQ6ywGRopQngc",
|
5
|
+
# "name": {
|
6
|
+
# "given_name": "Franz",
|
7
|
+
# "surname": "Ferdinand",
|
8
|
+
# "familiar_name": "Franz",
|
9
|
+
# "display_name": "Franz Ferdinand (Personal)"
|
10
|
+
# },
|
11
|
+
# "email": "franz@dropbox.com",
|
12
|
+
# "email_verified": true,
|
13
|
+
# "disabled": false,
|
14
|
+
# "is_teammate": true,
|
15
|
+
# "profile_photo_url": "https://dl-web.dropbox.com/account_photo/get/dbid%3AAAH4f99T0taONIb-OurWxbNQ6ywGRopQngc?vers=1453416696524&size=128x128",
|
16
|
+
# "team_member_id": "dbmid:AAHhy7WsR0x-u4ZCqiDl5Fz5zvuL3kmspwU"
|
17
|
+
# }
|
19
18
|
class BasicAccount < Base
|
20
19
|
field :account_id, String
|
21
20
|
field :name, DropboxApi::Metadata::Name
|
22
21
|
field :email, String
|
23
22
|
field :email_verified, :boolean
|
24
23
|
field :disabled, :boolean
|
25
|
-
field :is_teammate, :boolean
|
26
|
-
field :profile_photo_url, String
|
27
|
-
field :team_member_id, :boolean
|
24
|
+
field :is_teammate, :boolean, :optional
|
25
|
+
field :profile_photo_url, String, :optional
|
26
|
+
field :team_member_id, :boolean, :optional
|
28
27
|
end
|
29
28
|
end
|