dropbox-api 0.2.1 → 0.2.2

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.
data/dropbox-api.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.version = Dropbox::API::VERSION
8
8
  s.authors = ["Marcin Bunsch"]
9
9
  s.email = ["marcin@futuresimple.com"]
10
- s.homepage = ""
10
+ s.homepage = "http://github.com/futuresimple/dropbox-api"
11
11
  s.summary = "A Ruby client for the DropBox REST API."
12
12
  s.description = "To deliver a more Rubyesque experience when using the DropBox API."
13
13
 
@@ -18,7 +18,9 @@ module Dropbox
18
18
  include Dropbox::API::Client::Files
19
19
 
20
20
  def find(filename)
21
- ls(filename).first
21
+ data = self.raw.metadata(:path => filename)
22
+ data.delete('contents')
23
+ Dropbox::API::Object.convert(data, self)
22
24
  end
23
25
 
24
26
  def ls(path = '')
@@ -42,6 +44,11 @@ module Dropbox
42
44
  Dropbox::API::Object.convert(results, self)
43
45
  end
44
46
 
47
+ def delta(cursor = nil, options = {})
48
+ response = cursor ? raw.delta({ :cursor => cursor }.merge(options)) : raw.delta(options)
49
+ Dropbox::API::Object.init(response, self)
50
+ end
51
+
45
52
  end
46
53
 
47
54
  end
@@ -24,6 +24,10 @@ module Dropbox
24
24
  Dropbox::API::File.init(response, self)
25
25
  end
26
26
 
27
+ def copy_from_copy_ref(copy_ref, to, options = {})
28
+ raw.copy({ :from_copy_ref => copy_ref, :to_path => to }.merge(options))
29
+ end
30
+
27
31
  end
28
32
 
29
33
  end
@@ -11,7 +11,7 @@ module Dropbox
11
11
 
12
12
  def self.add_method(method, action, options = {})
13
13
  # Add the default root bit, but allow it to be disabled by a config option
14
- root = options[:root] == false ? '' : "options[:root] ||= '#{Dropbox::API::Config.mode}'"
14
+ root = options[:root] == false ? '' : "options[:root] ||= Dropbox::API::Config.mode"
15
15
  self.class_eval <<-STR
16
16
  def #{options[:as] || action}(options = {})
17
17
  #{root}
@@ -29,6 +29,7 @@ module Dropbox
29
29
  add_method :get, "/account/info", :as => 'account', :root => false
30
30
 
31
31
  add_method :get, "/metadata/:root/:path", :as => 'metadata'
32
+ add_method :post, "/delta", :as => 'delta', :root => false
32
33
  add_method :get, "/revisions/:root/:path", :as => 'revisions'
33
34
  add_method :post, "/restore/:root/:path", :as => 'restore'
34
35
  add_method :get, "/search/:root/:path", :as => 'search'
@@ -38,6 +39,7 @@ module Dropbox
38
39
  add_method :get_raw, "/thumbnails/:root/:path", :as => 'thumbnails', :endpoint => :content
39
40
 
40
41
  add_method :post, "/fileops/copy", :as => "copy"
42
+ add_method :get, "/copy_ref/:root/:path", :as => 'copy_ref'
41
43
  add_method :post, "/fileops/create_folder", :as => "create_folder"
42
44
  add_method :post, "/fileops/delete", :as => "delete"
43
45
  add_method :post, "/fileops/move", :as => "move"
@@ -28,7 +28,12 @@ module Dropbox
28
28
  def thumbnail(options = {})
29
29
  client.raw.thumbnails({ :path => self.path }.merge(options))
30
30
  end
31
-
31
+
32
+ def copy_ref(options = {})
33
+ response = client.raw.copy_ref({ :path => self.path }.merge(options))
34
+ Dropbox::API::Object.init(response, client)
35
+ end
36
+
32
37
  def download
33
38
  client.download(self.path)
34
39
  end
@@ -33,9 +33,9 @@ module Dropbox
33
33
  access_token = request_token.get_access_token(:oauth_verifier => token)
34
34
 
35
35
  puts "\nAuthorization complete!:\n\n"
36
- puts " Dropbox::Api::Config.app_key = '#{consumer.key}'"
37
- puts " Dropbox::Api::Config.app_secret = '#{consumer.secret}'"
38
- puts " client = Dropbox::Api::Client.new(:token => '#{access_token.token}', :secret => '#{access_token.secret}')"
36
+ puts " Dropbox::API::Config.app_key = '#{consumer.key}'"
37
+ puts " Dropbox::API::Config.app_secret = '#{consumer.secret}'"
38
+ puts " client = Dropbox::API::Client.new(:token => '#{access_token.token}', :secret => '#{access_token.secret}')"
39
39
  puts "\n"
40
40
  end
41
41
  end
@@ -1,5 +1,5 @@
1
1
  module Dropbox
2
2
  module API
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
4
4
  end
5
5
  end
@@ -1,4 +1,5 @@
1
1
  app_key: # CONSUMER KEY
2
2
  app_secret: # CONSUMER SECRET
3
3
  token: # ACCESS TOKEN
4
- secret: # ACCESS SECRET
4
+ secret: # ACCESS SECRET
5
+ mode: # 'sandbox' or 'dropbox'
@@ -25,6 +25,30 @@ describe Dropbox::API::Client do
25
25
 
26
26
  end
27
27
 
28
+ describe "#find" do
29
+
30
+ before do
31
+ @filename = "#{Dropbox::Spec.test_dir}/spec-find-file-test-#{Time.now.to_i}.txt"
32
+ @file = @client.upload @filename, "spec file"
33
+
34
+ @dirname = "#{Dropbox::Spec.test_dir}/spec-find-dir-test-#{Time.now.to_i}"
35
+ @dir = @client.mkdir @dirname
36
+ end
37
+
38
+ it "returns a single file" do
39
+ response = @client.find(@filename)
40
+ response.path.should == @file.path
41
+ response.should be_an_instance_of(Dropbox::API::File)
42
+ end
43
+
44
+ it "returns a single directory" do
45
+ response = @client.find(@dirname)
46
+ response.path.should == @dir.path
47
+ response.should be_an_instance_of(Dropbox::API::Dir)
48
+ end
49
+
50
+ end
51
+
28
52
  describe "#ls" do
29
53
 
30
54
  it "returns an array of files and dirs" do
@@ -33,7 +57,7 @@ describe Dropbox::API::Client do
33
57
  end
34
58
 
35
59
  it "returns a single item array of if we ls a file" do
36
- result = @client.ls
60
+ result = @client.ls(Dropbox::Spec.test_dir)
37
61
  first_file = result.detect { |f| f.class == Dropbox::API::File }
38
62
  result = @client.ls first_file.path
39
63
  result.should be_an_instance_of(Array)
@@ -44,21 +68,21 @@ describe Dropbox::API::Client do
44
68
  describe "#mkdir" do
45
69
 
46
70
  it "returns an array of files and dirs" do
47
- dirname = "test/test-dir-#{Dropbox::Spec.namespace}"
71
+ dirname = "#{Dropbox::Spec.test_dir}/test-dir-#{Dropbox::Spec.namespace}"
48
72
  response = @client.mkdir dirname
49
73
  response.path.should == dirname
50
74
  response.should be_an_instance_of(Dropbox::API::Dir)
51
75
  end
52
76
 
53
77
  it "creates dirs with tricky characters" do
54
- dirname = "test/test-dir |!@\#$%^&*{b}[].;'.,<>?: #{Dropbox::Spec.namespace}"
78
+ dirname = "#{Dropbox::Spec.test_dir}/test-dir |!@\#$%^&*{b}[].;'.,<>?: #{Dropbox::Spec.namespace}"
55
79
  response = @client.mkdir dirname
56
80
  response.path.should == dirname.gsub(/[\\\:\?\*\<\>\"\|]+/, '')
57
81
  response.should be_an_instance_of(Dropbox::API::Dir)
58
82
  end
59
83
 
60
84
  it "creates dirs with utf8 characters" do
61
- dirname = "test/test-dir łółą #{Dropbox::Spec.namespace}"
85
+ dirname = "#{Dropbox::Spec.test_dir}/test-dir łółą #{Dropbox::Spec.namespace}"
62
86
  response = @client.mkdir dirname
63
87
  response.path.should == dirname
64
88
  response.should be_an_instance_of(Dropbox::API::Dir)
@@ -69,21 +93,21 @@ describe Dropbox::API::Client do
69
93
  describe "#upload" do
70
94
 
71
95
  it "puts the file in dropbox" do
72
- filename = "test/test-#{Dropbox::Spec.namespace}.txt"
96
+ filename = "#{Dropbox::Spec.test_dir}/test-#{Dropbox::Spec.namespace}.txt"
73
97
  response = @client.upload filename, "Some file"
74
98
  response.path.should == filename
75
99
  response.bytes.should == 9
76
100
  end
77
101
 
78
102
  it "uploads the file with tricky characters" do
79
- filename = "test/test ,|!@\#$%^&*{b}[].;'.,<>?:-#{Dropbox::Spec.namespace}.txt"
103
+ filename = "#{Dropbox::Spec.test_dir}/test ,|!@\#$%^&*{b}[].;'.,<>?:-#{Dropbox::Spec.namespace}.txt"
80
104
  response = @client.upload filename, "Some file"
81
105
  response.path.should == filename
82
106
  response.bytes.should == 9
83
107
  end
84
108
 
85
109
  it "uploads the file with utf8" do
86
- filename = "test/test łołąó-#{Dropbox::Spec.namespace}.txt"
110
+ filename = "#{Dropbox::Spec.test_dir}/test łołąó-#{Dropbox::Spec.namespace}.txt"
87
111
  response = @client.upload filename, "Some file"
88
112
  response.path.should == filename
89
113
  response.bytes.should == 9
@@ -93,26 +117,54 @@ describe Dropbox::API::Client do
93
117
  describe "#search" do
94
118
 
95
119
  it "finds a file" do
120
+ filename = "#{Dropbox::Spec.test_dir}/searchable-test-#{Dropbox::Spec.namespace}.txt"
121
+ @client.upload filename, "Some file"
122
+ response = @client.search "searchable-test-#{Dropbox::Spec.namespace}", :path => "#{Dropbox::Spec.test_dir}"
123
+ response.size.should == 1
124
+ response.first.class.should == Dropbox::API::File
125
+ end
126
+
127
+ end
128
+
129
+ describe "#copy_from_copy_ref" do
130
+
131
+ it "copies a file from a copy_ref" do
96
132
  filename = "test/searchable-test-#{Dropbox::Spec.namespace}.txt"
97
133
  @client.upload filename, "Some file"
98
- response = @client.search "searchable-test-#{Dropbox::Spec.namespace}", :path => 'test'
134
+ response = @client.search "searchable-test-#{Dropbox::Spec.namespace}", :path => 'test'
135
+ ref = response.first.copy_ref['copy_ref']
136
+ @client.copy_from_copy_ref ref, "#{filename}.copied"
137
+ response = @client.search "searchable-test-#{Dropbox::Spec.namespace}.txt.copied", :path => 'test'
99
138
  response.size.should == 1
100
139
  response.first.class.should == Dropbox::API::File
101
140
  end
102
141
 
103
142
  end
104
143
 
144
+ describe "#delta" do
145
+
146
+ it "receives an object with a cursor and list of entries" do
147
+ filename = "test/delta-test-#{Dropbox::Spec.namespace}.txt"
148
+ @client.upload filename, "Some file"
149
+ response = @client.delta
150
+ response.cursor.should_not be_nil
151
+ response.entries.should_not be_nil
152
+ response.should be_an_instance_of(Dropbox::API::Object)
153
+ end
154
+
155
+ end
156
+
105
157
  describe "#download" do
106
158
 
107
159
  it "downloads a file from Dropbox" do
108
- @client.upload 'test/test.txt', "Some file"
109
- file = @client.download 'test/test.txt'
160
+ @client.upload "#{Dropbox::Spec.test_dir}/test.txt", "Some file"
161
+ file = @client.download "#{Dropbox::Spec.test_dir}/test.txt"
110
162
  file.should == "Some file"
111
163
  end
112
164
 
113
165
  it "raises a 404 when a file is not found in Dropbox" do
114
166
  lambda {
115
- @client.download 'test/no.txt'
167
+ @client.download "#{Dropbox::Spec.test_dir}/no.txt"
116
168
  }.should raise_error(Dropbox::API::Error::NotFound)
117
169
  end
118
170
 
@@ -4,7 +4,7 @@ describe Dropbox::API::Dir do
4
4
 
5
5
  before do
6
6
  @client = Dropbox::Spec.instance
7
- @dirname = "test/spec-dir-test-#{Time.now.to_i}"
7
+ @dirname = "#{Dropbox::Spec.test_dir}/spec-dir-test-#{Time.now.to_i}"
8
8
  @dir = @client.mkdir @dirname
9
9
  end
10
10
 
@@ -4,7 +4,7 @@ describe Dropbox::API::File do
4
4
 
5
5
  before do
6
6
  @client = Dropbox::Spec.instance
7
- @filename = "test/spec-test-#{Time.now.to_i}.txt"
7
+ @filename = "#{Dropbox::Spec.test_dir}/spec-test-#{Time.now.to_i}.txt"
8
8
  @file = @client.upload @filename, "spec file"
9
9
  end
10
10
 
@@ -21,7 +21,7 @@ describe Dropbox::API::File do
21
21
  end
22
22
 
23
23
  end
24
-
24
+
25
25
  describe "#move" do
26
26
 
27
27
  it "moves the file properly" do
@@ -91,6 +91,18 @@ describe Dropbox::API::File do
91
91
 
92
92
  end
93
93
 
94
+ describe "#copy_ref" do
95
+
96
+ it "returns a copy_ref object" do
97
+
98
+ result = @file.copy_ref
99
+ result.should be_an_instance_of(Dropbox::API::Object)
100
+ result.keys.sort.should == ['copy_ref', 'expires']
101
+
102
+ end
103
+
104
+ end
105
+
94
106
  describe "#direct_url" do
95
107
 
96
108
  it "returns an Url object" do
@@ -6,7 +6,7 @@ describe Dropbox::API::File do
6
6
  before do
7
7
  @io = StringIO.new
8
8
  @client = Dropbox::Spec.instance
9
- @filename = "test/spec-test-#{Time.now.to_i}.jpg"
9
+ @filename = "#{Dropbox::Spec.test_dir}/spec-test-#{Time.now.to_i}.jpg"
10
10
  jpeg = File.read("spec/fixtures/dropbox.jpg")
11
11
  @file = @client.upload @filename, jpeg
12
12
  end
data/spec/spec_helper.rb CHANGED
@@ -12,3 +12,12 @@ module Dropbox
12
12
  end
13
13
 
14
14
  Dir.glob("#{File.dirname(__FILE__)}/support/*.rb").each { |f| require f }
15
+
16
+ # Clean up after specs, remove test-directory
17
+ RSpec.configure do |config|
18
+ config.after(:all) do
19
+ test_dir = Dropbox::Spec.instance.find(Dropbox::Spec.test_dir)
20
+ test_dir.destroy unless test_dir.is_deleted?
21
+ end
22
+ end
23
+
@@ -4,6 +4,7 @@ config = YAML.load_file "spec/connection.yml"
4
4
 
5
5
  Dropbox::API::Config.app_key = config['app_key']
6
6
  Dropbox::API::Config.app_secret = config['app_secret']
7
+ Dropbox::API::Config.mode = config['mode']
7
8
 
8
9
  Dropbox::Spec.token = config['token']
9
10
  Dropbox::Spec.secret = config['secret']
@@ -11,3 +12,4 @@ Dropbox::Spec.secret = config['secret']
11
12
  Dropbox::Spec.namespace = Time.now.to_i
12
13
  Dropbox::Spec.instance = Dropbox::API::Client.new(:token => Dropbox::Spec.token,
13
14
  :secret => Dropbox::Spec.secret)
15
+ Dropbox::Spec.test_dir = "test-#{Time.now.to_i}"
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.1
4
+ version: 0.2.2
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-03-24 00:00:00.000000000 Z
12
+ date: 2012-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yajl-ruby
16
- requirement: &70337833527400 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70337833527400
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: oauth
27
- requirement: &70337833526700 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70337833526700
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: hashie
38
- requirement: &70337833526140 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,7 +53,12 @@ dependencies:
43
53
  version: '0'
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70337833526140
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  description: To deliver a more Rubyesque experience when using the DropBox API.
48
63
  email:
49
64
  - marcin@futuresimple.com
@@ -85,7 +100,7 @@ files:
85
100
  - spec/spec_helper.rb
86
101
  - spec/support/config.rb
87
102
  - spec/support/jpeg.rb
88
- homepage: ''
103
+ homepage: http://github.com/futuresimple/dropbox-api
89
104
  licenses: []
90
105
  post_install_message:
91
106
  rdoc_options: []
@@ -105,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
120
  version: '0'
106
121
  requirements: []
107
122
  rubyforge_project: dropbox-api
108
- rubygems_version: 1.8.10
123
+ rubygems_version: 1.8.24
109
124
  signing_key:
110
125
  specification_version: 3
111
126
  summary: A Ruby client for the DropBox REST API.