dropbox-api 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,6 +30,8 @@ module Dropbox
30
30
  end
31
31
 
32
32
  def mkdir(path)
33
+ # Remove the characters not allowed by Dropbox
34
+ path = path.gsub(/[\\\:\?\*\<\>\"\|]+/, '')
33
35
  response = raw.create_folder :path => path
34
36
  Dropbox::API::Dir.init(response, self)
35
37
  end
@@ -7,6 +7,7 @@ module Dropbox
7
7
 
8
8
  def download(path, options = {})
9
9
  root = options.delete(:root) || Dropbox::API::Config.mode
10
+ path = Dropbox::API::Util.escape(path)
10
11
  url = ['', "files", root, path].compact.join('/')
11
12
  connection.get_raw(:content, url)
12
13
  end
@@ -14,6 +15,7 @@ module Dropbox
14
15
  def upload(path, data, options = {})
15
16
  root = options.delete(:root) || Dropbox::API::Config.mode
16
17
  query = Dropbox::API::Util.query(options)
18
+ path = Dropbox::API::Util.escape(path)
17
19
  url = ['', "files_put", root, path].compact.join('/')
18
20
  response = connection.put(:content, "#{url}?#{query}", data, {
19
21
  'Content-Type' => "application/octet-stream",
@@ -22,7 +22,7 @@ module Dropbox
22
22
 
23
23
  def request(endpoint, method, action, data = {})
24
24
  action.sub! ':root', data.delete(:root) if action.match ':root'
25
- action.sub! ':path', data.delete(:path) if action.match ':path'
25
+ action.sub! ':path', Dropbox::API::Util.escape(data.delete(:path)) if action.match ':path'
26
26
  connection.send(method, endpoint, action, data)
27
27
  end
28
28
 
@@ -29,29 +29,31 @@ module Dropbox
29
29
  end
30
30
  end
31
31
 
32
+
33
+
32
34
  def get_raw(endpoint, path, data = {}, headers = {})
33
35
  query = Dropbox::API::Util.query(data)
34
36
  request(:raw => true) do
35
- token(endpoint).get "#{Dropbox::API::Config.prefix}#{URI.parse(URI.encode(path))}?#{URI.parse(URI.encode(query))}", headers
37
+ token(endpoint).get "#{Dropbox::API::Config.prefix}#{path}?#{URI.parse(URI.encode(query))}", headers
36
38
  end
37
39
  end
38
40
 
39
41
  def get(endpoint, path, data = {}, headers = {})
40
42
  query = Dropbox::API::Util.query(data)
41
43
  request do
42
- token(endpoint).get "#{Dropbox::API::Config.prefix}#{URI.parse(URI.encode(path))}?#{URI.parse(URI.encode(query))}", headers
44
+ token(endpoint).get "#{Dropbox::API::Config.prefix}#{path}?#{URI.parse(URI.encode(query))}", headers
43
45
  end
44
46
  end
45
47
 
46
48
  def post(endpoint, path, data = {}, headers = {})
47
49
  request do
48
- token(endpoint).post "#{Dropbox::API::Config.prefix}#{URI.parse(URI.encode(path))}", data, headers
50
+ token(endpoint).post "#{Dropbox::API::Config.prefix}#{path}", data, headers
49
51
  end
50
52
  end
51
53
 
52
54
  def put(endpoint, path, data = {}, headers = {})
53
55
  request do
54
- token(endpoint).put "#{Dropbox::API::Config.prefix}#{URI.parse(URI.encode(path))}", data, headers
56
+ token(endpoint).put "#{Dropbox::API::Config.prefix}#{path}", data, headers
55
57
  end
56
58
  end
57
59
 
@@ -5,6 +5,12 @@ module Dropbox
5
5
 
6
6
  class << self
7
7
 
8
+ def escape(string)
9
+ string.gsub(/([^ a-zA-Z0-9\.\\\-\/\_]+)/) do
10
+ '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
11
+ end.gsub(' ', '%20')
12
+ end
13
+
8
14
  def query(data)
9
15
  data.inject([]) { |memo, entry| memo.push(entry.join('=')); memo }.join('&')
10
16
  end
@@ -1,5 +1,5 @@
1
1
  module Dropbox
2
2
  module API
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require "spec_helper"
2
3
 
3
4
  describe Dropbox::API::Client do
@@ -49,6 +50,20 @@ describe Dropbox::API::Client do
49
50
  response.should be_an_instance_of(Dropbox::API::Dir)
50
51
  end
51
52
 
53
+ it "creates dirs with tricky characters" do
54
+ dirname = "test/test-dir |!@\#$%^&*{b}[].;'.,<>?: #{Dropbox::Spec.namespace}"
55
+ response = @client.mkdir dirname
56
+ response.path.should == dirname.gsub(/[\\\:\?\*\<\>\"\|]+/, '')
57
+ response.should be_an_instance_of(Dropbox::API::Dir)
58
+ end
59
+
60
+ it "creates dirs with utf8 characters" do
61
+ dirname = "test/test-dir łółą #{Dropbox::Spec.namespace}"
62
+ response = @client.mkdir dirname
63
+ response.path.should == dirname
64
+ response.should be_an_instance_of(Dropbox::API::Dir)
65
+ end
66
+
52
67
  end
53
68
 
54
69
  describe "#upload" do
@@ -60,6 +75,19 @@ describe Dropbox::API::Client do
60
75
  response.bytes.should == 9
61
76
  end
62
77
 
78
+ it "uploads the file with tricky characters" do
79
+ filename = "test/test ,|!@\#$%^&*{b}[].;'.,<>?:-#{Dropbox::Spec.namespace}.txt"
80
+ response = @client.upload filename, "Some file"
81
+ response.path.should == filename
82
+ response.bytes.should == 9
83
+ end
84
+
85
+ it "uploads the file with utf8" do
86
+ filename = "test/test łołąó-#{Dropbox::Spec.namespace}.txt"
87
+ response = @client.upload filename, "Some file"
88
+ response.path.should == filename
89
+ response.bytes.should == 9
90
+ end
63
91
  end
64
92
 
65
93
  describe "#search" do
@@ -77,6 +105,7 @@ describe Dropbox::API::Client do
77
105
  describe "#download" do
78
106
 
79
107
  it "downloads a file from Dropbox" do
108
+ @client.upload 'test/test.txt', "Some file"
80
109
  file = @client.download 'test/test.txt'
81
110
  file.should == "Some file"
82
111
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dropbox-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-19 00:00:00.000000000 Z
12
+ date: 2012-03-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yajl-ruby
16
- requirement: &70348446258240 !ruby/object:Gem::Requirement
16
+ requirement: &70337833527400 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70348446258240
24
+ version_requirements: *70337833527400
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: oauth
27
- requirement: &70348446257500 !ruby/object:Gem::Requirement
27
+ requirement: &70337833526700 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70348446257500
35
+ version_requirements: *70337833526700
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: hashie
38
- requirement: &70348446257040 !ruby/object:Gem::Requirement
38
+ requirement: &70337833526140 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70348446257040
46
+ version_requirements: *70337833526140
47
47
  description: To deliver a more Rubyesque experience when using the DropBox API.
48
48
  email:
49
49
  - marcin@futuresimple.com
@@ -121,3 +121,4 @@ test_files:
121
121
  - spec/spec_helper.rb
122
122
  - spec/support/config.rb
123
123
  - spec/support/jpeg.rb
124
+ has_rdoc: