dropbox-sdk 1.6.1 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/lib/dropbox_sdk.rb +120 -121
- metadata +2 -2
data/CHANGELOG
CHANGED
data/lib/dropbox_sdk.rb
CHANGED
@@ -14,10 +14,24 @@ module Dropbox # :nodoc:
|
|
14
14
|
WEB_SERVER = "www.dropbox.com"
|
15
15
|
|
16
16
|
API_VERSION = 1
|
17
|
-
SDK_VERSION = "1.6.
|
17
|
+
SDK_VERSION = "1.6.2"
|
18
18
|
|
19
19
|
TRUSTED_CERT_FILE = File.join(File.dirname(__FILE__), 'trusted-certs.crt')
|
20
20
|
|
21
|
+
def self.clean_params(params)
|
22
|
+
r = {}
|
23
|
+
params.each do |k,v|
|
24
|
+
r[k] = v.to_s if not v.nil?
|
25
|
+
end
|
26
|
+
r
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.make_query_string(params)
|
30
|
+
clean_params(params).collect {|k,v|
|
31
|
+
CGI.escape(k) + "=" + CGI.escape(v)
|
32
|
+
}.join("&")
|
33
|
+
end
|
34
|
+
|
21
35
|
def self.do_http(uri, request) # :nodoc:
|
22
36
|
http = Net::HTTP.new(uri.host, uri.port)
|
23
37
|
|
@@ -81,6 +95,28 @@ end
|
|
81
95
|
|
82
96
|
class DropboxSessionBase # :nodoc:
|
83
97
|
|
98
|
+
attr_writer :locale
|
99
|
+
|
100
|
+
def initialize(locale)
|
101
|
+
@locale = locale
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
def build_url(path, content_server)
|
107
|
+
port = 443
|
108
|
+
host = content_server ? Dropbox::API_CONTENT_SERVER : Dropbox::API_SERVER
|
109
|
+
full_path = "/#{Dropbox::API_VERSION}#{path}"
|
110
|
+
return URI::HTTPS.build({:host => host, :path => full_path})
|
111
|
+
end
|
112
|
+
|
113
|
+
def build_url_with_params(path, params, content_server) # :nodoc:
|
114
|
+
target = build_url(path, content_server)
|
115
|
+
params['locale'] = @locale
|
116
|
+
target.query = Dropbox::make_query_string(params)
|
117
|
+
return target
|
118
|
+
end
|
119
|
+
|
84
120
|
protected
|
85
121
|
|
86
122
|
def do_http(uri, request) # :nodoc:
|
@@ -90,19 +126,17 @@ class DropboxSessionBase # :nodoc:
|
|
90
126
|
|
91
127
|
public
|
92
128
|
|
93
|
-
def do_get(
|
129
|
+
def do_get(path, params=nil, headers=nil, content_server=false) # :nodoc:
|
130
|
+
params ||= {}
|
94
131
|
assert_authorized
|
95
|
-
uri =
|
96
|
-
|
97
|
-
do_http(uri, request)
|
132
|
+
uri = build_url_with_params(path, params, content_server)
|
133
|
+
do_http(uri, Net::HTTP::Get.new(uri.request_uri))
|
98
134
|
end
|
99
135
|
|
100
136
|
def do_http_with_body(uri, request, body)
|
101
137
|
if body != nil
|
102
138
|
if body.is_a?(Hash)
|
103
|
-
|
104
|
-
body.each {|k,v| form_data[k.to_s] = v if !v.nil?}
|
105
|
-
request.set_form_data(form_data)
|
139
|
+
request.set_form_data(Dropbox::clean_params(body))
|
106
140
|
elsif body.respond_to?(:read)
|
107
141
|
if body.respond_to?(:length)
|
108
142
|
request["Content-Length"] = body.length.to_s
|
@@ -121,15 +155,18 @@ class DropboxSessionBase # :nodoc:
|
|
121
155
|
do_http(uri, request)
|
122
156
|
end
|
123
157
|
|
124
|
-
def do_post(
|
158
|
+
def do_post(path, params=nil, headers=nil, content_server=false) # :nodoc:
|
159
|
+
params ||= {}
|
125
160
|
assert_authorized
|
126
|
-
uri =
|
127
|
-
|
161
|
+
uri = build_url(path, content_server)
|
162
|
+
params['locale'] = @locale
|
163
|
+
do_http_with_body(uri, Net::HTTP::Post.new(uri.request_uri, headers), params)
|
128
164
|
end
|
129
165
|
|
130
|
-
def do_put(
|
166
|
+
def do_put(path, params=nil, headers=nil, body=nil, content_server=false) # :nodoc:
|
167
|
+
params ||= {}
|
131
168
|
assert_authorized
|
132
|
-
uri =
|
169
|
+
uri = build_url_with_params(path, params, content_server)
|
133
170
|
do_http_with_body(uri, Net::HTTP::Put.new(uri.request_uri, headers), body)
|
134
171
|
end
|
135
172
|
end
|
@@ -141,7 +178,8 @@ class DropboxSession < DropboxSessionBase # :nodoc:
|
|
141
178
|
|
142
179
|
# * consumer_key - Your Dropbox application's "app key".
|
143
180
|
# * consumer_secret - Your Dropbox application's "app secret".
|
144
|
-
def initialize(consumer_key, consumer_secret)
|
181
|
+
def initialize(consumer_key, consumer_secret, locale=nil)
|
182
|
+
super(locale)
|
145
183
|
@consumer_key = consumer_key
|
146
184
|
@consumer_secret = consumer_secret
|
147
185
|
@request_token = nil
|
@@ -304,7 +342,9 @@ end
|
|
304
342
|
|
305
343
|
|
306
344
|
class DropboxOAuth2Session < DropboxSessionBase # :nodoc:
|
307
|
-
|
345
|
+
|
346
|
+
def initialize(oauth2_access_token, locale=nil)
|
347
|
+
super(locale)
|
308
348
|
if not oauth2_access_token.is_a?(String)
|
309
349
|
raise "bad type for oauth2_access_token (expecting String)"
|
310
350
|
end
|
@@ -340,25 +380,19 @@ class DropboxOAuth2FlowBase # :nodoc:
|
|
340
380
|
end
|
341
381
|
|
342
382
|
def _get_authorize_url(redirect_uri, state)
|
343
|
-
params = {
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
if not @locale.nil?
|
351
|
-
params['locale'] = @locale
|
352
|
-
end
|
383
|
+
params = {
|
384
|
+
"client_id" => @consumer_key,
|
385
|
+
"response_type" => "code",
|
386
|
+
"redirect_uri" => redirect_uri,
|
387
|
+
"state" => state,
|
388
|
+
"locale" => @locale,
|
389
|
+
}
|
353
390
|
|
354
391
|
host = Dropbox::WEB_SERVER
|
355
392
|
path = "/#{Dropbox::API_VERSION}/oauth2/authorize"
|
356
393
|
|
357
394
|
target = URI::Generic.new("https", nil, host, nil, nil, path, nil, nil, nil)
|
358
|
-
|
359
|
-
target.query = params.collect {|k,v|
|
360
|
-
CGI.escape(k) + "=" + CGI.escape(v)
|
361
|
-
}.join("&")
|
395
|
+
target.query = Dropbox::make_query_string(params)
|
362
396
|
|
363
397
|
target.to_s
|
364
398
|
end
|
@@ -378,18 +412,11 @@ class DropboxOAuth2FlowBase # :nodoc:
|
|
378
412
|
params = {
|
379
413
|
"grant_type" => "authorization_code",
|
380
414
|
"code" => code,
|
415
|
+
"redirect_uri" => original_redirect_uri,
|
416
|
+
"locale" => @locale,
|
381
417
|
}
|
382
418
|
|
383
|
-
|
384
|
-
params['locale'] = @locale
|
385
|
-
end
|
386
|
-
if not original_redirect_uri.nil?
|
387
|
-
params['redirect_uri'] = original_redirect_uri
|
388
|
-
end
|
389
|
-
|
390
|
-
form_data = {}
|
391
|
-
params.each {|k,v| form_data[k.to_s] = v if !v.nil?}
|
392
|
-
request.set_form_data(form_data)
|
419
|
+
request.set_form_data(Dropbox::clean_params(params))
|
393
420
|
|
394
421
|
response = Dropbox::do_http(uri, request)
|
395
422
|
|
@@ -653,10 +680,13 @@ class DropboxClient
|
|
653
680
|
# * +locale+: The user's current locale (used to localize error messages).
|
654
681
|
def initialize(oauth2_access_token, root="auto", locale=nil)
|
655
682
|
if oauth2_access_token.is_a?(String)
|
656
|
-
@session = DropboxOAuth2Session.new(oauth2_access_token)
|
683
|
+
@session = DropboxOAuth2Session.new(oauth2_access_token, locale)
|
657
684
|
elsif oauth2_access_token.is_a?(DropboxSession)
|
658
685
|
@session = oauth2_access_token
|
659
686
|
@session.get_access_token
|
687
|
+
if not locale.nil?
|
688
|
+
@session.locale = locale
|
689
|
+
end
|
660
690
|
else
|
661
691
|
raise ArgumentError.new("oauth2_access_token doesn't have a valid type")
|
662
692
|
end
|
@@ -671,8 +701,6 @@ class DropboxClient
|
|
671
701
|
#sandbox is the URL root component that indicates this
|
672
702
|
@root = "sandbox"
|
673
703
|
end
|
674
|
-
|
675
|
-
@locale = locale
|
676
704
|
end
|
677
705
|
|
678
706
|
# Returns some information about the current user's Dropbox account (the "current user"
|
@@ -681,7 +709,7 @@ class DropboxClient
|
|
681
709
|
# For a detailed description of what this call returns, visit:
|
682
710
|
# https://www.dropbox.com/developers/reference/api#account-info
|
683
711
|
def account_info()
|
684
|
-
response = @session.do_get
|
712
|
+
response = @session.do_get "/account/info"
|
685
713
|
Dropbox::parse_response(response)
|
686
714
|
end
|
687
715
|
|
@@ -720,16 +748,14 @@ class DropboxClient
|
|
720
748
|
# The file will not overwrite any pre-existing file.
|
721
749
|
def put_file(to_path, file_obj, overwrite=false, parent_rev=nil)
|
722
750
|
path = "/files_put/#{@root}#{format_path(to_path)}"
|
723
|
-
|
724
751
|
params = {
|
725
|
-
'overwrite' => overwrite.to_s
|
752
|
+
'overwrite' => overwrite.to_s,
|
753
|
+
'parent_rev' => parent_rev,
|
726
754
|
}
|
727
755
|
|
728
|
-
|
729
|
-
|
730
|
-
response = @session.do_put
|
731
|
-
{"Content-Type" => "application/octet-stream"},
|
732
|
-
file_obj)
|
756
|
+
headers = {"Content-Type" => "application/octet-stream"}
|
757
|
+
content_server = true
|
758
|
+
response = @session.do_put path, params, headers, file_obj, content_server
|
733
759
|
|
734
760
|
Dropbox::parse_response(response)
|
735
761
|
end
|
@@ -819,20 +845,24 @@ class DropboxClient
|
|
819
845
|
end
|
820
846
|
|
821
847
|
def commit_chunked_upload(to_path, upload_id, overwrite=false, parent_rev=nil) #:nodoc
|
848
|
+
path = "/commit_chunked_upload/#{@root}#{format_path(to_path)}"
|
822
849
|
params = {'overwrite' => overwrite.to_s,
|
823
850
|
'upload_id' => upload_id,
|
824
|
-
'parent_rev' => parent_rev
|
851
|
+
'parent_rev' => parent_rev,
|
825
852
|
}
|
826
|
-
|
853
|
+
headers = nil
|
854
|
+
content_server = true
|
855
|
+
@session.do_post path, params, headers, content_server
|
827
856
|
end
|
828
857
|
|
829
858
|
def partial_chunked_upload(data, upload_id=nil, offset=nil) #:nodoc
|
830
|
-
params = {
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
859
|
+
params = {
|
860
|
+
'upload_id' => upload_id,
|
861
|
+
'offset' => offset,
|
862
|
+
}
|
863
|
+
headers = {'Content-Type' => "application/octet-stream"}
|
864
|
+
content_server = true
|
865
|
+
@session.do_put '/chunked_upload', params, headers, data, content_server
|
836
866
|
end
|
837
867
|
|
838
868
|
# Download a file
|
@@ -873,11 +903,13 @@ class DropboxClient
|
|
873
903
|
# Returns:
|
874
904
|
# * The HTTPResponse for the file download request.
|
875
905
|
def get_file_impl(from_path, rev=nil) # :nodoc:
|
876
|
-
params = {}
|
877
|
-
params['rev'] = rev.to_s if rev
|
878
|
-
|
879
906
|
path = "/files/#{@root}#{format_path(from_path)}"
|
880
|
-
|
907
|
+
params = {
|
908
|
+
'rev' => rev,
|
909
|
+
}
|
910
|
+
headers = nil
|
911
|
+
content_server = true
|
912
|
+
@session.do_get path, params, headers, content_server
|
881
913
|
end
|
882
914
|
private :get_file_impl
|
883
915
|
|
@@ -920,7 +952,7 @@ class DropboxClient
|
|
920
952
|
"from_path" => format_path(from_path, false),
|
921
953
|
"to_path" => format_path(to_path, false),
|
922
954
|
}
|
923
|
-
response = @session.do_post
|
955
|
+
response = @session.do_post "/fileops/copy", params
|
924
956
|
Dropbox::parse_response(response)
|
925
957
|
end
|
926
958
|
|
@@ -938,7 +970,7 @@ class DropboxClient
|
|
938
970
|
"root" => @root,
|
939
971
|
"path" => format_path(path, false),
|
940
972
|
}
|
941
|
-
response = @session.do_post
|
973
|
+
response = @session.do_post "/fileops/create_folder", params
|
942
974
|
|
943
975
|
Dropbox::parse_response(response)
|
944
976
|
end
|
@@ -957,7 +989,7 @@ class DropboxClient
|
|
957
989
|
"root" => @root,
|
958
990
|
"path" => format_path(path, false),
|
959
991
|
}
|
960
|
-
response = @session.do_post
|
992
|
+
response = @session.do_post "/fileops/delete", params
|
961
993
|
Dropbox::parse_response(response)
|
962
994
|
end
|
963
995
|
|
@@ -978,7 +1010,7 @@ class DropboxClient
|
|
978
1010
|
"from_path" => format_path(from_path, false),
|
979
1011
|
"to_path" => format_path(to_path, false),
|
980
1012
|
}
|
981
|
-
response = @session.do_post
|
1013
|
+
response = @session.do_post "/fileops/move", params
|
982
1014
|
Dropbox::parse_response(response)
|
983
1015
|
end
|
984
1016
|
|
@@ -1009,15 +1041,14 @@ class DropboxClient
|
|
1009
1041
|
params = {
|
1010
1042
|
"file_limit" => file_limit.to_s,
|
1011
1043
|
"list" => list.to_s,
|
1012
|
-
"include_deleted" => include_deleted.to_s
|
1044
|
+
"include_deleted" => include_deleted.to_s,
|
1045
|
+
"hash" => hash,
|
1046
|
+
"rev" => rev,
|
1013
1047
|
}
|
1014
1048
|
|
1015
|
-
|
1016
|
-
params["rev"] = rev if rev
|
1017
|
-
|
1018
|
-
response = @session.do_get build_url("/metadata/#{@root}#{format_path(path)}", params=params)
|
1049
|
+
response = @session.do_get "/metadata/#{@root}#{format_path(path)}", params
|
1019
1050
|
if response.kind_of? Net::HTTPRedirection
|
1020
|
-
|
1051
|
+
raise DropboxNotModified.new("metadata not modified")
|
1021
1052
|
end
|
1022
1053
|
Dropbox::parse_response(response)
|
1023
1054
|
end
|
@@ -1043,7 +1074,7 @@ class DropboxClient
|
|
1043
1074
|
'include_deleted' => include_deleted.to_s
|
1044
1075
|
}
|
1045
1076
|
|
1046
|
-
response = @session.do_get
|
1077
|
+
response = @session.do_get "/search/#{@root}#{format_path(path)}", params
|
1047
1078
|
Dropbox::parse_response(response)
|
1048
1079
|
end
|
1049
1080
|
|
@@ -1061,14 +1092,12 @@ class DropboxClient
|
|
1061
1092
|
# For a detailed description of what this call returns, visit:
|
1062
1093
|
# https://www.dropbox.com/developers/reference/api#revisions
|
1063
1094
|
def revisions(path, rev_limit=1000)
|
1064
|
-
|
1065
1095
|
params = {
|
1066
1096
|
'rev_limit' => rev_limit.to_s
|
1067
1097
|
}
|
1068
1098
|
|
1069
|
-
response = @session.do_get
|
1099
|
+
response = @session.do_get "/revisions/#{@root}#{format_path(path)}", params
|
1070
1100
|
Dropbox::parse_response(response)
|
1071
|
-
|
1072
1101
|
end
|
1073
1102
|
|
1074
1103
|
# Restore a file to a previous revision.
|
@@ -1086,7 +1115,7 @@ class DropboxClient
|
|
1086
1115
|
'rev' => rev.to_s
|
1087
1116
|
}
|
1088
1117
|
|
1089
|
-
response = @session.do_post
|
1118
|
+
response = @session.do_post "/restore/#{@root}#{format_path(path)}", params
|
1090
1119
|
Dropbox::parse_response(response)
|
1091
1120
|
end
|
1092
1121
|
|
@@ -1101,9 +1130,9 @@ class DropboxClient
|
|
1101
1130
|
#
|
1102
1131
|
# Returns:
|
1103
1132
|
# * A Hash object that looks like the following:
|
1104
|
-
# {'url': 'https://dl.
|
1133
|
+
# {'url': 'https://dl.dropboxusercontent.com/1/view/abcdefghijk/example', 'expires': 'Thu, 16 Sep 2011 01:01:25 +0000'}
|
1105
1134
|
def media(path)
|
1106
|
-
response = @session.do_get
|
1135
|
+
response = @session.do_get "/media/#{@root}#{format_path(path)}"
|
1107
1136
|
Dropbox::parse_response(response)
|
1108
1137
|
end
|
1109
1138
|
|
@@ -1118,11 +1147,11 @@ class DropboxClient
|
|
1118
1147
|
#
|
1119
1148
|
# Returns:
|
1120
1149
|
# * A Hash object that looks like the following example:
|
1121
|
-
# {'url': '
|
1150
|
+
# {'url': 'https://db.tt/c0mFuu1Y', 'expires': 'Tue, 01 Jan 2030 00:00:00 +0000'}
|
1122
1151
|
# For a detailed description of what this call returns, visit:
|
1123
1152
|
# https://www.dropbox.com/developers/reference/api#shares
|
1124
1153
|
def shares(path)
|
1125
|
-
response = @session.do_get
|
1154
|
+
response = @session.do_get "/shares/#{@root}#{format_path(path)}"
|
1126
1155
|
Dropbox::parse_response(response)
|
1127
1156
|
end
|
1128
1157
|
|
@@ -1203,12 +1232,11 @@ class DropboxClient
|
|
1203
1232
|
# way. To facilitate this, the _path_ strings above are lower-cased versions of
|
1204
1233
|
# the actual path. The _metadata_ dicts have the original, case-preserved path.
|
1205
1234
|
def delta(cursor=nil)
|
1206
|
-
params = {
|
1207
|
-
|
1208
|
-
|
1209
|
-
end
|
1235
|
+
params = {
|
1236
|
+
'cursor' => cursor,
|
1237
|
+
}
|
1210
1238
|
|
1211
|
-
response = @session.do_post
|
1239
|
+
response = @session.do_post "/delta", params
|
1212
1240
|
Dropbox::parse_response(response)
|
1213
1241
|
end
|
1214
1242
|
|
@@ -1222,15 +1250,13 @@ class DropboxClient
|
|
1222
1250
|
# Returns:
|
1223
1251
|
# * The HTTPResponse for the thumbnail request.
|
1224
1252
|
def thumbnail_impl(from_path, size='large') # :nodoc:
|
1225
|
-
|
1226
|
-
|
1253
|
+
path = "/thumbnails/#{@root}#{format_path(from_path, true)}"
|
1227
1254
|
params = {
|
1228
1255
|
"size" => size
|
1229
1256
|
}
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
@session.do_get url
|
1257
|
+
headers = nil
|
1258
|
+
content_server = true
|
1259
|
+
@session.do_get path, params, headers, content_server
|
1234
1260
|
end
|
1235
1261
|
private :thumbnail_impl
|
1236
1262
|
|
@@ -1246,9 +1272,7 @@ class DropboxClient
|
|
1246
1272
|
# {"expires"=>"Fri, 31 Jan 2042 21:01:05 +0000", "copy_ref"=>"z1X6ATl6aWtzOGq0c3g5Ng"}
|
1247
1273
|
def create_copy_ref(path)
|
1248
1274
|
path = "/copy_ref/#{@root}#{format_path(path)}"
|
1249
|
-
|
1250
|
-
response = @session.do_get(build_url(path, {}))
|
1251
|
-
|
1275
|
+
response = @session.do_get path
|
1252
1276
|
Dropbox::parse_response(response)
|
1253
1277
|
end
|
1254
1278
|
|
@@ -1262,39 +1286,14 @@ class DropboxClient
|
|
1262
1286
|
# Returns:
|
1263
1287
|
# * A hash with the metadata of the new file.
|
1264
1288
|
def add_copy_ref(to_path, copy_ref)
|
1265
|
-
path = "/fileops/copy"
|
1266
|
-
|
1267
1289
|
params = {'from_copy_ref' => copy_ref,
|
1268
1290
|
'to_path' => "#{to_path}",
|
1269
1291
|
'root' => @root}
|
1270
1292
|
|
1271
|
-
response = @session.do_post
|
1272
|
-
|
1293
|
+
response = @session.do_post "/fileops/copy", params
|
1273
1294
|
Dropbox::parse_response(response)
|
1274
1295
|
end
|
1275
1296
|
|
1276
|
-
def build_url(url, params=nil, content_server=false) # :nodoc:
|
1277
|
-
port = 443
|
1278
|
-
host = content_server ? Dropbox::API_CONTENT_SERVER : Dropbox::API_SERVER
|
1279
|
-
versioned_url = "/#{Dropbox::API_VERSION}#{url}"
|
1280
|
-
|
1281
|
-
target = URI::Generic.new("https", nil, host, port, nil, versioned_url, nil, nil, nil)
|
1282
|
-
|
1283
|
-
#add a locale param if we have one
|
1284
|
-
#initialize a params object is we don't have one
|
1285
|
-
if @locale
|
1286
|
-
(params ||= {})['locale']=@locale
|
1287
|
-
end
|
1288
|
-
|
1289
|
-
if params
|
1290
|
-
target.query = params.collect {|k,v|
|
1291
|
-
CGI.escape(k) + "=" + CGI.escape(v)
|
1292
|
-
}.join("&")
|
1293
|
-
end
|
1294
|
-
|
1295
|
-
target.to_s
|
1296
|
-
end
|
1297
|
-
|
1298
1297
|
#From the oauth spec plus "/". Slash should not be ecsaped
|
1299
1298
|
RESERVED_CHARACTERS = /[^a-zA-Z0-9\-\.\_\~\/]/ # :nodoc:
|
1300
1299
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dropbox-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|