dbox 0.6.11 → 0.6.12

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.6.12 / 2012-06-01
2
+ * Minor Enhancements
3
+ * Added clone_or_pull operation for if you aren't sure if the local folder exists yet or not.
4
+ * Added delete operation for deleting a remote Dropbox folder as well as the local folder if it exists.
5
+
1
6
  == 0.6.11 / 2012-04-10
2
7
  * Minor Enhancements
3
8
  * Added operations that failed change calculation to result hash on pull.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.11
1
+ 0.6.12
data/bin/dbox CHANGED
@@ -16,6 +16,8 @@ Commands:
16
16
  push [<local_path>] Push changes to Dropbox
17
17
  sync [<local_path>] Sync changes to Dropbox
18
18
  move <new_remote_path> [<local_path>] Move the remote Dropbox folder to a new location
19
+ delete <remote_path> [<local_path>] Delete a Dropbox folder (local path optional, it will be deleted too if provided)
20
+ clone_or_pull <remote_path> [<local_path>] Clone an existing Dropbox folder, or pull if it already exists locally
19
21
 
20
22
  Environment varables needed for everything:
21
23
  export DROPBOX_APP_KEY=cmlrrjd3j0gbend
@@ -40,9 +42,9 @@ args = ARGV[1..-1]
40
42
  case command
41
43
  when "authorize"
42
44
  Dbox.authorize
43
- when "create", "clone"
45
+ when "create", "clone", "clone_or_pull", "delete"
44
46
  unless args.size >= 1
45
- puts "Error: Please provide a remote path to clone"
47
+ puts "Error: Please provide a remote path"
46
48
  print_usage_and_quit
47
49
  end
48
50
 
data/dbox.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "dbox"
8
- s.version = "0.6.11"
8
+ s.version = "0.6.12"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ken Pratt"]
12
- s.date = "2012-04-10"
12
+ s.date = "2012-06-01"
13
13
  s.description = "An easy-to-use Dropbox client with fine-grained control over syncs."
14
14
  s.email = "ken@kenpratt.net"
15
15
  s.executables = ["dbox"]
data/lib/dbox.rb CHANGED
@@ -47,6 +47,14 @@ module Dbox
47
47
  Dbox::Syncer.pull(local_path)
48
48
  end
49
49
 
50
+ def self.clone_or_pull(remote_path, local_path)
51
+ if exists?(local_path)
52
+ pull(local_path)
53
+ else
54
+ clone(remote_path, local_path)
55
+ end
56
+ end
57
+
50
58
  def self.push(local_path)
51
59
  log.debug "Pushing (local: #{local_path})"
52
60
  local_path = clean_local_path(local_path)
@@ -76,6 +84,17 @@ module Dbox
76
84
  Dbox::Database.exists?(local_path)
77
85
  end
78
86
 
87
+ def self.delete(remote_path, local_path = nil)
88
+ log.debug "Deleting (remote: #{remote_path})"
89
+ remote_path = clean_remote_path(remote_path)
90
+ Dbox::Syncer.api.delete_dir(remote_path)
91
+ if local_path
92
+ local_path = clean_local_path(local_path)
93
+ log.debug "Deleting (local_path: #{local_path})"
94
+ FileUtils.rm_rf(local_path) if File.exists?(local_path)
95
+ end
96
+ end
97
+
79
98
  private
80
99
 
81
100
  def self.clean_remote_path(path)
data/lib/dbox/api.rb CHANGED
@@ -110,6 +110,7 @@ module Dbox
110
110
  log.debug "Fetching metadata for #{path}"
111
111
  res = @client.metadata(path, 10000, list, hash)
112
112
  log.debug res.inspect
113
+ raise Dbox::RemoteMissing, "#{path} has been deleted on Dropbox" if res["is_deleted"]
113
114
  res
114
115
  end
115
116
  end
data/spec/dbox_spec.rb CHANGED
@@ -219,6 +219,28 @@ describe Dbox do
219
219
  end
220
220
  end
221
221
 
222
+ describe "#clone_or_pull" do
223
+ it "creates the local directory" do
224
+ Dbox.create(@remote, @local)
225
+ rm_rf @local
226
+ @local.should_not exist
227
+ Dbox.clone_or_pull(@remote, @local).should eql(:created => [], :deleted => [], :updated => [""], :failed => [])
228
+ @local.should exist
229
+ end
230
+
231
+ it "should fail if the remote does not exist" do
232
+ expect { Dbox.clone_or_pull(@remote, @local) }.to raise_error(Dbox::RemoteMissing)
233
+ @local.should_not exist
234
+ end
235
+
236
+ it "shold be able to pull changes on existing repo" do
237
+ Dbox.create(@remote, @local)
238
+ @local.should exist
239
+ Dbox.clone_or_pull(@remote, @local).should eql(:created => [], :deleted => [], :updated => [], :failed => [])
240
+ @local.should exist
241
+ end
242
+ end
243
+
222
244
  describe "#push" do
223
245
  it "should fail if the local dir is missing" do
224
246
  expect { Dbox.push(@local) }.to raise_error(Dbox::DatabaseError)
@@ -511,4 +533,21 @@ describe Dbox do
511
533
  Dbox.pull(@alternate).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => [], :updated => [""], :failed => [])
512
534
  end
513
535
  end
536
+
537
+ describe "#delete" do
538
+ it "should delete the remote directory" do
539
+ Dbox.create(@remote, @local)
540
+ rm_rf @local
541
+ Dbox.delete(@remote)
542
+ expect { Dbox.clone(@remote, @local) }.to raise_error(Dbox::RemoteMissing)
543
+ end
544
+
545
+ it "should delete the local directory if given" do
546
+ Dbox.create(@remote, @local)
547
+ @local.should exist
548
+ Dbox.delete(@remote, @local)
549
+ @local.should_not exist
550
+ expect { Dbox.clone(@remote, @local) }.to raise_error(Dbox::RemoteMissing)
551
+ end
552
+ end
514
553
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dbox
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 11
10
- version: 0.6.11
9
+ - 12
10
+ version: 0.6.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ken Pratt
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-10 00:00:00 Z
18
+ date: 2012-06-01 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: multipart-post