dropbox_api 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +3 -0
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +118 -0
- data/Rakefile +6 -0
- data/TODO.md +8 -0
- data/api_coverage.md +107 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/dropbox_api.gemspec +30 -0
- data/lib/dropbox_api.rb +102 -0
- data/lib/dropbox_api/authenticator.rb +20 -0
- data/lib/dropbox_api/client.rb +13 -0
- data/lib/dropbox_api/connection_builder.rb +17 -0
- data/lib/dropbox_api/endpoints/base.rb +44 -0
- data/lib/dropbox_api/endpoints/content_download.rb +33 -0
- data/lib/dropbox_api/endpoints/content_upload.rb +25 -0
- data/lib/dropbox_api/endpoints/files/copy.rb +22 -0
- data/lib/dropbox_api/endpoints/files/create_folder.rb +19 -0
- data/lib/dropbox_api/endpoints/files/delete.rb +25 -0
- data/lib/dropbox_api/endpoints/files/download.rb +16 -0
- data/lib/dropbox_api/endpoints/files/get_metadata.rb +29 -0
- data/lib/dropbox_api/endpoints/files/get_preview.rb +18 -0
- data/lib/dropbox_api/endpoints/files/get_temporary_link.rb +18 -0
- data/lib/dropbox_api/endpoints/files/get_thumbnail.rb +34 -0
- data/lib/dropbox_api/endpoints/files/list_folder.rb +38 -0
- data/lib/dropbox_api/endpoints/files/list_folder_continue.rb +21 -0
- data/lib/dropbox_api/endpoints/files/list_folder_get_latest_cursor.rb +40 -0
- data/lib/dropbox_api/endpoints/files/list_folder_longpoll.rb +36 -0
- data/lib/dropbox_api/endpoints/files/list_revisions.rb +27 -0
- data/lib/dropbox_api/endpoints/files/move.rb +22 -0
- data/lib/dropbox_api/endpoints/files/restore.rb +20 -0
- data/lib/dropbox_api/endpoints/files/search.rb +44 -0
- data/lib/dropbox_api/endpoints/files/upload.rb +26 -0
- data/lib/dropbox_api/endpoints/options_validator.rb +11 -0
- data/lib/dropbox_api/endpoints/rpc.rb +18 -0
- data/lib/dropbox_api/endpoints/rpc_notify.rb +11 -0
- data/lib/dropbox_api/endpoints/sharing/add_folder_member.rb +54 -0
- data/lib/dropbox_api/endpoints/sharing/create_shared_link_with_settings.rb +23 -0
- data/lib/dropbox_api/endpoints/sharing/list_folder_members.rb +31 -0
- data/lib/dropbox_api/endpoints/sharing/list_shared_links.rb +31 -0
- data/lib/dropbox_api/endpoints/sharing/share_folder.rb +58 -0
- data/lib/dropbox_api/endpoints/users/get_account.rb +17 -0
- data/lib/dropbox_api/errors/add_folder_member_error.rb +16 -0
- data/lib/dropbox_api/errors/add_member_selector_error.rb +11 -0
- data/lib/dropbox_api/errors/already_shared_error.rb +7 -0
- data/lib/dropbox_api/errors/basic_error.rb +83 -0
- data/lib/dropbox_api/errors/create_folder_error.rb +7 -0
- data/lib/dropbox_api/errors/create_shared_link_with_settings_error.rb +11 -0
- data/lib/dropbox_api/errors/delete_error.rb +8 -0
- data/lib/dropbox_api/errors/download_error.rb +7 -0
- data/lib/dropbox_api/errors/get_account_error.rb +7 -0
- data/lib/dropbox_api/errors/get_metadata_error.rb +7 -0
- data/lib/dropbox_api/errors/http_error.rb +6 -0
- data/lib/dropbox_api/errors/list_folder_continue_error.rb +8 -0
- data/lib/dropbox_api/errors/list_folder_error.rb +7 -0
- data/lib/dropbox_api/errors/list_folder_longpoll_error.rb +7 -0
- data/lib/dropbox_api/errors/list_revisions_error.rb +7 -0
- data/lib/dropbox_api/errors/list_shared_links_error.rb +8 -0
- data/lib/dropbox_api/errors/lookup_error.rb +11 -0
- data/lib/dropbox_api/errors/preview_error.rb +10 -0
- data/lib/dropbox_api/errors/relocation_error.rb +13 -0
- data/lib/dropbox_api/errors/restore_error.rb +9 -0
- data/lib/dropbox_api/errors/search_error.rb +7 -0
- data/lib/dropbox_api/errors/settings_error.rb +8 -0
- data/lib/dropbox_api/errors/share_folder_error.rb +11 -0
- data/lib/dropbox_api/errors/share_path_error.rb +17 -0
- data/lib/dropbox_api/errors/shared_folder_access_error.rb +10 -0
- data/lib/dropbox_api/errors/upload_error.rb +7 -0
- data/lib/dropbox_api/errors/upload_write_failed_error.rb +7 -0
- data/lib/dropbox_api/errors/write_conflict_error.rb +9 -0
- data/lib/dropbox_api/errors/write_error.rb +11 -0
- data/lib/dropbox_api/metadata/add_member.rb +62 -0
- data/lib/dropbox_api/metadata/base.rb +22 -0
- data/lib/dropbox_api/metadata/basic_account.rb +29 -0
- data/lib/dropbox_api/metadata/deleted.rb +15 -0
- data/lib/dropbox_api/metadata/field.rb +34 -0
- data/lib/dropbox_api/metadata/file.rb +30 -0
- data/lib/dropbox_api/metadata/file_link.rb +46 -0
- data/lib/dropbox_api/metadata/folder.rb +17 -0
- data/lib/dropbox_api/metadata/folder_link.rb +12 -0
- data/lib/dropbox_api/metadata/folder_sharing_info.rb +13 -0
- data/lib/dropbox_api/metadata/link_permissions.rb +19 -0
- data/lib/dropbox_api/metadata/name.rb +16 -0
- data/lib/dropbox_api/metadata/resource.rb +31 -0
- data/lib/dropbox_api/metadata/shared_folder.rb +26 -0
- data/lib/dropbox_api/metadata/shared_folder_policy.rb +12 -0
- data/lib/dropbox_api/metadata/shared_link.rb +26 -0
- data/lib/dropbox_api/metadata/team.rb +6 -0
- data/lib/dropbox_api/metadata/team_member_info.rb +17 -0
- data/lib/dropbox_api/middleware/decode_result.rb +26 -0
- data/lib/dropbox_api/result_builder.rb +31 -0
- data/lib/dropbox_api/results/base.rb +7 -0
- data/lib/dropbox_api/results/get_temporary_link_result.rb +11 -0
- data/lib/dropbox_api/results/list_folder_get_latest_cursor_result.rb +7 -0
- data/lib/dropbox_api/results/list_folder_longpoll_result.rb +15 -0
- data/lib/dropbox_api/results/list_folder_result.rb +22 -0
- data/lib/dropbox_api/results/list_revisions_result.rb +14 -0
- data/lib/dropbox_api/results/list_shared_links_result.rb +22 -0
- data/lib/dropbox_api/results/search/match.rb +15 -0
- data/lib/dropbox_api/results/search_result.rb +22 -0
- data/lib/dropbox_api/results/share_folder_launch.rb +14 -0
- data/lib/dropbox_api/results/shared_folder_members.rb +19 -0
- data/lib/dropbox_api/results/void_result.rb +4 -0
- data/lib/dropbox_api/version.rb +3 -0
- metadata +256 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
class Base
|
3
|
+
def self.field(name, type, *options)
|
4
|
+
@fields ||= {}
|
5
|
+
@fields[name] = DropboxApi::Metadata::Field.new(type, options)
|
6
|
+
|
7
|
+
attr_reader name
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.each_field
|
11
|
+
@fields.each do |name, field|
|
12
|
+
yield name, field
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(metadata)
|
17
|
+
self.class.each_field do |name, field|
|
18
|
+
instance_variable_set "@#{name}", field.cast(metadata[name.to_s])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# "account_id": "dbid:AAH4f99T0taONIb-OurWxbNQ6ywGRopQngc",
|
6
|
+
# "name": {
|
7
|
+
# "given_name": "Franz",
|
8
|
+
# "surname": "Ferdinand",
|
9
|
+
# "familiar_name": "Franz",
|
10
|
+
# "display_name": "Franz Ferdinand (Personal)"
|
11
|
+
# },
|
12
|
+
# "email": "franz@dropbox.com",
|
13
|
+
# "email_verified": true,
|
14
|
+
# "disabled": false,
|
15
|
+
# "is_teammate": true,
|
16
|
+
# "profile_photo_url": "https://dl-web.dropbox.com/account_photo/get/dbid%3AAAH4f99T0taONIb-OurWxbNQ6ywGRopQngc?vers=1453416696524&size=128x128",
|
17
|
+
# "team_member_id": "dbmid:AAHhy7WsR0x-u4ZCqiDl5Fz5zvuL3kmspwU"
|
18
|
+
# }
|
19
|
+
class BasicAccount < Base
|
20
|
+
field :account_id, String
|
21
|
+
field :name, DropboxApi::Metadata::Name
|
22
|
+
field :email, String
|
23
|
+
field :email_verified, :boolean
|
24
|
+
field :disabled, :boolean
|
25
|
+
field :is_teammate, :boolean
|
26
|
+
field :profile_photo_url, String
|
27
|
+
field :team_member_id, :boolean
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# ".tag": "deleted",
|
6
|
+
# "name": "file.txt",
|
7
|
+
# "path_lower": "/file.txt",
|
8
|
+
# "path_display": "/file.txt"
|
9
|
+
# }
|
10
|
+
class Deleted < Base
|
11
|
+
field :name, String
|
12
|
+
field :path_lower, String
|
13
|
+
field :path_display, String
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
class Field
|
3
|
+
def initialize(type, options = [])
|
4
|
+
@type = type
|
5
|
+
@options = options
|
6
|
+
end
|
7
|
+
|
8
|
+
def cast(object)
|
9
|
+
if object.nil? && @options.include?(:optional)
|
10
|
+
nil
|
11
|
+
else
|
12
|
+
force_cast object
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def force_cast(object)
|
17
|
+
if @type == String
|
18
|
+
object.to_s
|
19
|
+
elsif @type == Time
|
20
|
+
Time.new(object)
|
21
|
+
elsif @type == Integer
|
22
|
+
object.to_i
|
23
|
+
elsif @type == Symbol
|
24
|
+
object[".tag"].to_sym
|
25
|
+
elsif @type == :boolean
|
26
|
+
object.to_s == "true"
|
27
|
+
elsif @type.ancestors.include? DropboxApi::Metadata::Base
|
28
|
+
@type.new(object)
|
29
|
+
else
|
30
|
+
raise NotImplementedError, "Can't cast `#{type}`"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# ".tag": "file",
|
6
|
+
# "name": "Prime_Numbers.txt",
|
7
|
+
# "path_lower": "/homework/math/prime_numbers.txt",
|
8
|
+
# "path_display": "/Homework/math/Prime_Numbers.txt",
|
9
|
+
# "id": "id:a4ayc_80_OEAAAAAAAAAXw",
|
10
|
+
# "client_modified": "2015-05-12T15:50:38Z",
|
11
|
+
# "server_modified": "2015-05-12T15:50:38Z",
|
12
|
+
# "rev": "a1c10ce0dd78",
|
13
|
+
# "size": 7212,
|
14
|
+
# "sharing_info": {
|
15
|
+
# "read_only": true,
|
16
|
+
# "parent_shared_folder_id": "84528192421",
|
17
|
+
# "modified_by": "dbid:AAH4f99T0taONIb-OurWxbNQ6ywGRopQngc"
|
18
|
+
# }
|
19
|
+
# }
|
20
|
+
class File < Base
|
21
|
+
field :name, String
|
22
|
+
field :path_lower, String
|
23
|
+
field :path_display, String
|
24
|
+
field :id, String
|
25
|
+
field :client_modified, Time
|
26
|
+
field :server_modified, Time
|
27
|
+
field :rev, String
|
28
|
+
field :size, Integer
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# ".tag": "file",
|
6
|
+
# "url": "https://www.dropbox.com/s/2sn712vy1ovegw8/Prime_Numbers.txt?dl=0",
|
7
|
+
# "name": "Prime_Numbers.txt",
|
8
|
+
# "link_permissions": {
|
9
|
+
# "can_revoke": false,
|
10
|
+
# "resolved_visibility": {
|
11
|
+
# ".tag": "public"
|
12
|
+
# },
|
13
|
+
# "revoke_failure_reason": {
|
14
|
+
# ".tag": "owner_only"
|
15
|
+
# }
|
16
|
+
# },
|
17
|
+
# "client_modified": "2015-05-12T15:50:38Z",
|
18
|
+
# "server_modified": "2015-05-12T15:50:38Z",
|
19
|
+
# "rev": "a1c10ce0dd78",
|
20
|
+
# "size": 7212,
|
21
|
+
# "id": "id:a4ayc_80_OEAAAAAAAAAXw",
|
22
|
+
# "path_lower": "/homework/math/prime_numbers.txt",
|
23
|
+
# "team_member_info": {
|
24
|
+
# "team_info": {
|
25
|
+
# "id": "dbtid:AAFdgehTzw7WlXhZJsbGCLePe8RvQGYDr-I",
|
26
|
+
# "name": "Acme, Inc."
|
27
|
+
# },
|
28
|
+
# "display_name": "Roger Rabbit",
|
29
|
+
# "member_id": "dbmid:abcd1234"
|
30
|
+
# }
|
31
|
+
# }
|
32
|
+
class FileLink < Base
|
33
|
+
field :url, String
|
34
|
+
field :name, String
|
35
|
+
field :link_permissions, DropboxApi::Metadata::LinkPermissions
|
36
|
+
field :client_modified, Time
|
37
|
+
field :server_modified, Time
|
38
|
+
field :rev, String
|
39
|
+
field :size, Integer
|
40
|
+
field :id, String, :optional
|
41
|
+
field :expires, Time, :optional
|
42
|
+
field :path_lower, String, :optional
|
43
|
+
field :team_member_info, DropboxApi::Metadata::TeamMemberInfo, :optional
|
44
|
+
field :content_owner_team_info, DropboxApi::Metadata::Team, :optional
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# "name": "arizona_baby",
|
6
|
+
# "path_lower": "/arizona_baby",
|
7
|
+
# "path_display": "/arizona_baby",
|
8
|
+
# "id": "id:7eWkV5hcfzAAAAAAAAAAAQ"
|
9
|
+
# }
|
10
|
+
class Folder < Base
|
11
|
+
field :name, String
|
12
|
+
field :path_lower, String
|
13
|
+
field :path_display, String
|
14
|
+
field :id, String
|
15
|
+
field :sharing_info, DropboxApi::Metadata::FolderSharingInfo, :optional
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
class FolderLink < Base
|
3
|
+
field :url, String
|
4
|
+
field :name, String
|
5
|
+
field :link_permissions, DropboxApi::Metadata::LinkPermissions
|
6
|
+
field :id, String, :optional
|
7
|
+
field :expires, Time, :optional
|
8
|
+
field :path_lower, String, :optional
|
9
|
+
field :team_member_info, DropboxApi::Metadata::TeamMemberInfo, :optional
|
10
|
+
field :content_owner_team_info, DropboxApi::Metadata::Team, :optional
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# "read_only": false,
|
6
|
+
# "parent_shared_folder_id": "84528192421"
|
7
|
+
# }
|
8
|
+
class FolderSharingInfo < Base
|
9
|
+
field :read_only, :boolean
|
10
|
+
field :parent_shared_folder_id, String, :optional
|
11
|
+
field :shared_folder_id, String, :optional
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# "can_revoke": false,
|
6
|
+
# "resolved_visibility": {
|
7
|
+
# ".tag": "public"
|
8
|
+
# },
|
9
|
+
# "revoke_failure_reason": {
|
10
|
+
# ".tag": "owner_only"
|
11
|
+
# }
|
12
|
+
# }
|
13
|
+
class LinkPermissions < Base
|
14
|
+
field :can_revoke, :boolean
|
15
|
+
field :resolved_visibility, Symbol, :optional
|
16
|
+
field :requested_visibility, Symbol, :optional
|
17
|
+
field :revoke_failure_reason, Symbol, :optional
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# "given_name": "Franz",
|
6
|
+
# "surname": "Ferdinand",
|
7
|
+
# "familiar_name": "Franz",
|
8
|
+
# "display_name": "Franz Ferdinand (Personal)"
|
9
|
+
# },
|
10
|
+
class Name < Base
|
11
|
+
field :given_name, String
|
12
|
+
field :surname, String
|
13
|
+
field :familiar_name, String
|
14
|
+
field :display_name, String
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,31 @@
|
|
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
|
+
# For example, calling Resource.new({".tag" => "file", :name => ...}) will
|
6
|
+
# instantiate a `File` object.
|
7
|
+
#
|
8
|
+
# So this could initalize an object of either `File`, `Folder` or `Deleted`.
|
9
|
+
class Resource
|
10
|
+
class << self
|
11
|
+
def new(data)
|
12
|
+
class_for(data[".tag"].to_sym).new(data)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def class_for(tag)
|
18
|
+
case tag
|
19
|
+
when :file
|
20
|
+
DropboxApi::Metadata::File
|
21
|
+
when :folder
|
22
|
+
DropboxApi::Metadata::Folder
|
23
|
+
when :deleted
|
24
|
+
DropboxApi::Metadata::Deleted
|
25
|
+
else
|
26
|
+
raise ArgumentError, "Unable to infer resource type for `#{tag}`"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# ".tag" => "complete",
|
6
|
+
# "access_type" => {".tag"=>"owner"},
|
7
|
+
# "is_team_folder" => false,
|
8
|
+
# "policy" => {
|
9
|
+
# "acl_update_policy" => { ".tag" => "owner" },
|
10
|
+
# "shared_link_policy" => { ".tag" => "anyone" }
|
11
|
+
# },
|
12
|
+
# "path_lower" => "/folder_a",
|
13
|
+
# "name" => "folder_a",
|
14
|
+
# "shared_folder_id" => "1231266557",
|
15
|
+
# "time_invited" => "2016-06-04T10:00:35Z"
|
16
|
+
# }
|
17
|
+
class SharedFolder < Base
|
18
|
+
field :access_type, String
|
19
|
+
field :is_team_folder, :boolean
|
20
|
+
field :policy, DropboxApi::Metadata::SharedFolderPolicy
|
21
|
+
field :path_lower, String
|
22
|
+
field :name, String
|
23
|
+
field :shared_folder_id, Integer
|
24
|
+
field :time_invited, Time
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# "acl_update_policy" => { ".tag" => "owner" },
|
6
|
+
# "shared_link_policy" => { ".tag" => "anyone" }
|
7
|
+
# }
|
8
|
+
class SharedFolderPolicy < Base
|
9
|
+
field :acl_update_policy, Symbol
|
10
|
+
field :shared_link_policy, Symbol
|
11
|
+
end
|
12
|
+
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 SharedLink
|
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::FileLink
|
18
|
+
when :folder
|
19
|
+
DropboxApi::Metadata::FolderLink
|
20
|
+
else
|
21
|
+
raise ArgumentError, "Unable to infer resource type for `#{tag}`"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DropboxApi::Metadata
|
2
|
+
# NOTE: We should have a test to cover the initialization of this object.
|
3
|
+
# Sample:
|
4
|
+
# {
|
5
|
+
# "team_info": {
|
6
|
+
# "id": "dbtid:AAFdgehTzw7WlXhZJsbGCLePe8RvQGYDr-I",
|
7
|
+
# "name": "Acme, Inc."
|
8
|
+
# },
|
9
|
+
# "display_name": "Roger Rabbit",
|
10
|
+
# "member_id": "dbmid:abcd1234"
|
11
|
+
# }
|
12
|
+
class TeamMemberInfo < Base
|
13
|
+
field :team_info, DropboxApi::Metadata::Team
|
14
|
+
field :display_name, String
|
15
|
+
field :member_id, String, :optional
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module DropboxApi::MiddleWare
|
2
|
+
class DecodeResult < Faraday::Middleware
|
3
|
+
def call(rq_env)
|
4
|
+
@app.call(rq_env).on_complete do |rs_env|
|
5
|
+
if !rs_env[:response_headers]['Dropbox-Api-Result'].nil?
|
6
|
+
rs_env[:api_result] = decode rs_env[:response_headers]['Dropbox-Api-Result']
|
7
|
+
elsif rs_env[:response_headers]['content-type'] == 'application/json'
|
8
|
+
rs_env[:api_result] = decode rs_env[:body]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def decode(json)
|
14
|
+
# Dropbox may send a response with the string 'null' in its body, this
|
15
|
+
# would be a void result. `add_folder_member` is an example of an
|
16
|
+
# endpoint without return values.
|
17
|
+
if json == "null"
|
18
|
+
{}
|
19
|
+
else
|
20
|
+
JSON.parse json
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
Faraday::Response.register_middleware :decode_result => DecodeResult
|
26
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module DropboxApi
|
2
|
+
class ResultBuilder
|
3
|
+
def initialize(response_data)
|
4
|
+
@response_data = response_data
|
5
|
+
end
|
6
|
+
|
7
|
+
def error_summary
|
8
|
+
@response_data["error_summary"]
|
9
|
+
end
|
10
|
+
|
11
|
+
def error
|
12
|
+
@response_data["error"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def has_error?
|
16
|
+
!error_summary.nil?
|
17
|
+
end
|
18
|
+
|
19
|
+
def success?
|
20
|
+
!has_error?
|
21
|
+
end
|
22
|
+
|
23
|
+
def build(result_class)
|
24
|
+
result_class.new(@response_data)
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_error(error_type)
|
28
|
+
error_type.build(error_summary, error)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|