dbox 0.5.2 → 0.5.3
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/README.md +2 -2
- data/VERSION +1 -1
- data/bin/dbox +4 -2
- data/dbox.gemspec +3 -3
- data/lib/dbox/database.rb +5 -0
- data/lib/dbox/syncer.rb +19 -7
- data/spec/dbox_spec.rb +73 -70
- data/spec/spec_helper.rb +4 -0
- metadata +5 -5
data/README.md
CHANGED
@@ -146,10 +146,10 @@ Oh, Hello
|
|
146
146
|
Using dbox from Ruby
|
147
147
|
--------------------
|
148
148
|
|
149
|
-
The Ruby clone, pull, and push APIs return a hash listing the changes made during that pull/push.
|
149
|
+
The Ruby clone, pull, and push APIs return a hash listing the changes made during that pull/push. If any failures were encountered while uploading or downloading from Dropbox, they will be shown in the ```:failed``` entry in the hash. Often, trying your operation again will resolve the failures as the Dropbox API returns errors for valid operations on occasion.
|
150
150
|
|
151
151
|
```ruby
|
152
|
-
{ :created => ["foo.txt"], :deleted => [], :updated => [] }
|
152
|
+
{ :created => ["foo.txt"], :deleted => [], :updated => [], :failed => [] }
|
153
153
|
```
|
154
154
|
|
155
155
|
### Usage
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.3
|
data/bin/dbox
CHANGED
@@ -51,12 +51,14 @@ when "create", "clone"
|
|
51
51
|
# the same name of the directory being created/cloned
|
52
52
|
local_path = args[1] || remote_path.split("/").last
|
53
53
|
|
54
|
-
Dbox.send(command, remote_path, local_path)
|
54
|
+
res = Dbox.send(command, remote_path, local_path)
|
55
|
+
exit 1 if res[:failed].size > 0
|
55
56
|
when "pull", "push"
|
56
57
|
# default to current directory
|
57
58
|
local_path = args[0] || "."
|
58
59
|
|
59
|
-
Dbox.send(command, local_path)
|
60
|
+
res = Dbox.send(command, local_path)
|
61
|
+
exit 1 if res[:failed].size > 0
|
60
62
|
when "move"
|
61
63
|
remote_path = args[0]
|
62
64
|
|
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.5.
|
8
|
+
s.version = "0.5.3"
|
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 = "2011-
|
12
|
+
s.date = "2011-11-04"
|
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"]
|
@@ -49,7 +49,7 @@ Gem::Specification.new do |s|
|
|
49
49
|
s.homepage = "http://github.com/kenpratt/dbox"
|
50
50
|
s.licenses = ["MIT"]
|
51
51
|
s.require_paths = ["lib"]
|
52
|
-
s.rubygems_version = "1.8.
|
52
|
+
s.rubygems_version = "1.8.11"
|
53
53
|
s.summary = "Dropbox made easy."
|
54
54
|
|
55
55
|
if s.respond_to? :specification_version then
|
data/lib/dbox/database.rb
CHANGED
@@ -146,6 +146,11 @@ module Dbox
|
|
146
146
|
insert_entry(:path => path, :is_dir => is_dir, :parent_id => parent_id, :modified => modified, :revision => revision, :hash => hash)
|
147
147
|
end
|
148
148
|
|
149
|
+
def update_entry_by_id(id, fields)
|
150
|
+
raise(ArgumentError, "id cannot be null") unless id
|
151
|
+
update_entry(["WHERE id=?", id], fields)
|
152
|
+
end
|
153
|
+
|
149
154
|
def update_entry_by_path(path, fields)
|
150
155
|
raise(ArgumentError, "path cannot be null") unless path
|
151
156
|
update_entry(["WHERE path=?", path], fields)
|
data/lib/dbox/syncer.rb
CHANGED
@@ -213,7 +213,8 @@ module Dbox
|
|
213
213
|
dir = database.root_dir
|
214
214
|
changes = calculate_changes(dir)
|
215
215
|
log.debug "Executing changes:\n" + changes.map {|c| c.inspect }.join("\n")
|
216
|
-
|
216
|
+
parent_ids_of_failed_entries = []
|
217
|
+
changelist = { :created => [], :deleted => [], :updated => [], :failed => [] }
|
217
218
|
|
218
219
|
# spin up a parallel task queue
|
219
220
|
ptasks = ParallelTasks.new(MAX_PARALLEL_DBOX_OPS - 1) { clone_api_into_current_thread() }
|
@@ -237,6 +238,8 @@ module Dbox
|
|
237
238
|
changelist[:created] << c[:path]
|
238
239
|
rescue Dbox::ServerError => e
|
239
240
|
log.error "Error while downloading #{c[:path]}: #{e.inspect}"
|
241
|
+
parent_ids_of_failed_entries << c[:parent_id]
|
242
|
+
changelist[:failed] << { :operation => :create, :path => c[:path], :error => e }
|
240
243
|
end
|
241
244
|
end
|
242
245
|
end
|
@@ -253,6 +256,8 @@ module Dbox
|
|
253
256
|
changelist[:updated] << c[:path]
|
254
257
|
rescue Dbox::ServerError => e
|
255
258
|
log.error "Error while downloading #{c[:path]}: #{e.inspect}"
|
259
|
+
parent_ids_of_failed_entries << c[:parent_id]
|
260
|
+
changelist[:failed] << { :operation => :create, :path => c[:path], :error => e }
|
256
261
|
end
|
257
262
|
end
|
258
263
|
end
|
@@ -268,6 +273,12 @@ module Dbox
|
|
268
273
|
# wait for operations to finish
|
269
274
|
ptasks.finish
|
270
275
|
|
276
|
+
# clear hashes on any dirs with children that failed so that
|
277
|
+
# they are processed again on next pull
|
278
|
+
parent_ids_of_failed_entries.uniq.each do |id|
|
279
|
+
database.update_entry_by_id(id, :hash => nil)
|
280
|
+
end
|
281
|
+
|
271
282
|
# sort & return output
|
272
283
|
changelist.keys.each {|k| changelist[k].sort! }
|
273
284
|
changelist
|
@@ -419,7 +430,7 @@ module Dbox
|
|
419
430
|
dir = database.root_dir
|
420
431
|
changes = calculate_changes(dir)
|
421
432
|
log.debug "Executing changes:\n" + changes.map {|c| c.inspect }.join("\n")
|
422
|
-
changelist = { :created => [], :deleted => [], :updated => [] }
|
433
|
+
changelist = { :created => [], :deleted => [], :updated => [], :failed => [] }
|
423
434
|
|
424
435
|
# spin up a parallel task queue
|
425
436
|
ptasks = ParallelTasks.new(MAX_PARALLEL_DBOX_OPS - 1) { clone_api_into_current_thread() }
|
@@ -431,24 +442,23 @@ module Dbox
|
|
431
442
|
c[:parent_id] ||= lookup_id_by_path(c[:parent_path])
|
432
443
|
|
433
444
|
if c[:is_dir]
|
434
|
-
database.add_entry(c[:path], true, c[:parent_id], nil, nil, nil)
|
435
|
-
|
436
445
|
# directory creation cannot go in a thread, since later
|
437
446
|
# operations might depend on the directory being there
|
438
447
|
create_dir(c)
|
448
|
+
database.add_entry(c[:path], true, c[:parent_id], nil, nil, nil)
|
439
449
|
force_metadata_update_from_server(c)
|
440
450
|
changelist[:created] << c[:path]
|
441
451
|
else
|
442
|
-
database.add_entry(c[:path], false, c[:parent_id], nil, nil, nil)
|
443
|
-
|
444
452
|
# spin up a thread to upload the file
|
445
453
|
ptasks.add do
|
446
454
|
begin
|
447
455
|
upload_file(c)
|
456
|
+
database.add_entry(c[:path], false, c[:parent_id], nil, nil, nil)
|
448
457
|
force_metadata_update_from_server(c)
|
449
458
|
changelist[:created] << c[:path]
|
450
459
|
rescue Dbox::ServerError => e
|
451
460
|
log.error "Error while uploading #{c[:path]}: #{e.inspect}"
|
461
|
+
changelist[:failed] << { :operation => :create, :path => c[:path], :error => e }
|
452
462
|
end
|
453
463
|
end
|
454
464
|
end
|
@@ -469,6 +479,7 @@ module Dbox
|
|
469
479
|
changelist[:updated] << c[:path]
|
470
480
|
rescue Dbox::ServerError => e
|
471
481
|
log.error "Error while uploading #{c[:path]}: #{e.inspect}"
|
482
|
+
changelist[:failed] << { :operation => :update, :path => c[:path], :error => e }
|
472
483
|
end
|
473
484
|
end
|
474
485
|
end
|
@@ -487,8 +498,9 @@ module Dbox
|
|
487
498
|
end
|
488
499
|
database.delete_entry_by_path(c[:path])
|
489
500
|
changelist[:deleted] << c[:path]
|
490
|
-
rescue Dbox::ServerError
|
501
|
+
rescue Dbox::ServerError => e
|
491
502
|
log.error "Error while deleting #{c[:path]}: #{e.inspect}"
|
503
|
+
changelist[:failed] << { :operation => :delete, :path => c[:path], :error => e }
|
492
504
|
end
|
493
505
|
end
|
494
506
|
else
|
data/spec/dbox_spec.rb
CHANGED
@@ -22,12 +22,12 @@ describe Dbox do
|
|
22
22
|
|
23
23
|
describe "#create" do
|
24
24
|
it "creates the local directory" do
|
25
|
-
Dbox.create(@remote, @local).should eql(:created => [], :deleted => [], :updated => [""])
|
25
|
+
Dbox.create(@remote, @local).should eql(:created => [], :deleted => [], :updated => [""], :failed => [])
|
26
26
|
@local.should exist
|
27
27
|
end
|
28
28
|
|
29
29
|
it "creates the remote directory" do
|
30
|
-
Dbox.create(@remote, @local).should eql(:created => [], :deleted => [], :updated => [""])
|
30
|
+
Dbox.create(@remote, @local).should eql(:created => [], :deleted => [], :updated => [""], :failed => [])
|
31
31
|
ensure_remote_exists(@remote)
|
32
32
|
end
|
33
33
|
|
@@ -44,7 +44,7 @@ describe Dbox do
|
|
44
44
|
Dbox.create(@remote, @local)
|
45
45
|
rm_rf @local
|
46
46
|
@local.should_not exist
|
47
|
-
Dbox.clone(@remote, @local).should eql(:created => [], :deleted => [], :updated => [""])
|
47
|
+
Dbox.clone(@remote, @local).should eql(:created => [], :deleted => [], :updated => [""], :failed => [])
|
48
48
|
@local.should exist
|
49
49
|
end
|
50
50
|
|
@@ -68,7 +68,7 @@ describe Dbox do
|
|
68
68
|
|
69
69
|
it "should be able to pull" do
|
70
70
|
Dbox.create(@remote, @local)
|
71
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [])
|
71
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [], :failed => [])
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should be able to pull changes" do
|
@@ -77,19 +77,19 @@ describe Dbox do
|
|
77
77
|
|
78
78
|
@alternate = "#{ALTERNATE_LOCAL_TEST_PATH}/#{@name}"
|
79
79
|
Dbox.clone(@remote, @alternate)
|
80
|
-
|
81
|
-
Dbox.push(@alternate).should eql(:created => ["hello.txt"], :deleted => [], :updated => [])
|
80
|
+
make_file "#{@alternate}/hello.txt"
|
81
|
+
Dbox.push(@alternate).should eql(:created => ["hello.txt"], :deleted => [], :updated => [], :failed => [])
|
82
82
|
|
83
|
-
Dbox.pull(@local).should eql(:created => ["hello.txt"], :deleted => [], :updated => [""])
|
83
|
+
Dbox.pull(@local).should eql(:created => ["hello.txt"], :deleted => [], :updated => [""], :failed => [])
|
84
84
|
"#{@local}/hello.txt".should exist
|
85
85
|
end
|
86
86
|
|
87
87
|
it "should be able to pull after deleting a file and not have the file re-created" do
|
88
88
|
Dbox.create(@remote, @local)
|
89
|
-
|
90
|
-
Dbox.push(@local).should eql(:created => ["hello.txt"], :deleted => [], :updated => [])
|
89
|
+
make_file "#{@local}/hello.txt"
|
90
|
+
Dbox.push(@local).should eql(:created => ["hello.txt"], :deleted => [], :updated => [], :failed => [])
|
91
91
|
rm "#{@local}/hello.txt"
|
92
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [""])
|
92
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [""], :failed => [])
|
93
93
|
"#{@local}/hello.txt".should_not exist
|
94
94
|
end
|
95
95
|
|
@@ -99,28 +99,28 @@ describe Dbox do
|
|
99
99
|
@alternate = "#{ALTERNATE_LOCAL_TEST_PATH}/#{@name}"
|
100
100
|
Dbox.clone(@remote, @alternate)
|
101
101
|
|
102
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [])
|
102
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [], :failed => [])
|
103
103
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
Dbox.push(@alternate).should eql(:created => ["bar.txt", "baz.txt", "foo.txt"], :deleted => [], :updated => [])
|
108
|
-
Dbox.pull(@alternate).should eql(:created => [], :deleted => [], :updated => [""])
|
109
|
-
Dbox.pull(@alternate).should eql(:created => [], :deleted => [], :updated => [])
|
104
|
+
make_file "#{@alternate}/foo.txt"
|
105
|
+
make_file "#{@alternate}/bar.txt"
|
106
|
+
make_file "#{@alternate}/baz.txt"
|
107
|
+
Dbox.push(@alternate).should eql(:created => ["bar.txt", "baz.txt", "foo.txt"], :deleted => [], :updated => [], :failed => [])
|
108
|
+
Dbox.pull(@alternate).should eql(:created => [], :deleted => [], :updated => [""], :failed => [])
|
109
|
+
Dbox.pull(@alternate).should eql(:created => [], :deleted => [], :updated => [], :failed => [])
|
110
110
|
|
111
|
-
Dbox.pull(@local).should eql(:created => ["bar.txt", "baz.txt", "foo.txt"], :deleted => [], :updated => [""])
|
112
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [])
|
111
|
+
Dbox.pull(@local).should eql(:created => ["bar.txt", "baz.txt", "foo.txt"], :deleted => [], :updated => [""], :failed => [])
|
112
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [], :failed => [])
|
113
113
|
|
114
114
|
mkdir "#{@alternate}/subdir"
|
115
|
-
|
115
|
+
make_file "#{@alternate}/subdir/one.txt"
|
116
116
|
rm "#{@alternate}/foo.txt"
|
117
|
-
|
118
|
-
Dbox.push(@alternate).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => ["foo.txt"], :updated => ["baz.txt"])
|
119
|
-
Dbox.pull(@alternate).should eql(:created => [], :deleted => [], :updated => ["", "subdir"])
|
120
|
-
Dbox.pull(@alternate).should eql(:created => [], :deleted => [], :updated => [])
|
117
|
+
make_file "#{@alternate}/baz.txt"
|
118
|
+
Dbox.push(@alternate).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => ["foo.txt"], :updated => ["baz.txt"], :failed => [])
|
119
|
+
Dbox.pull(@alternate).should eql(:created => [], :deleted => [], :updated => ["", "subdir"], :failed => [])
|
120
|
+
Dbox.pull(@alternate).should eql(:created => [], :deleted => [], :updated => [], :failed => [])
|
121
121
|
|
122
|
-
Dbox.pull(@local).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => ["foo.txt"], :updated => ["", "baz.txt"])
|
123
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [])
|
122
|
+
Dbox.pull(@local).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => ["foo.txt"], :updated => ["", "baz.txt"], :failed => [])
|
123
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [], :failed => [])
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
@@ -131,102 +131,104 @@ describe Dbox do
|
|
131
131
|
|
132
132
|
it "should be able to push" do
|
133
133
|
Dbox.create(@remote, @local)
|
134
|
-
Dbox.push(@local).should eql(:created => [], :deleted => [], :updated => [])
|
134
|
+
Dbox.push(@local).should eql(:created => [], :deleted => [], :updated => [], :failed => [])
|
135
135
|
end
|
136
136
|
|
137
137
|
it "should be able to push a new file" do
|
138
138
|
Dbox.create(@remote, @local)
|
139
|
-
|
140
|
-
Dbox.push(@local).should eql(:created => ["foo.txt"], :deleted => [], :updated => [])
|
139
|
+
make_file "#{@local}/foo.txt"
|
140
|
+
Dbox.push(@local).should eql(:created => ["foo.txt"], :deleted => [], :updated => [], :failed => [])
|
141
141
|
end
|
142
142
|
|
143
143
|
it "should be able to push a new dir" do
|
144
144
|
Dbox.create(@remote, @local)
|
145
145
|
mkdir "#{@local}/subdir"
|
146
|
-
Dbox.push(@local).should eql(:created => ["subdir"], :deleted => [], :updated => [])
|
146
|
+
Dbox.push(@local).should eql(:created => ["subdir"], :deleted => [], :updated => [], :failed => [])
|
147
147
|
end
|
148
148
|
|
149
149
|
it "should be able to push a new dir with a file in it" do
|
150
150
|
Dbox.create(@remote, @local)
|
151
151
|
mkdir "#{@local}/subdir"
|
152
|
-
|
153
|
-
Dbox.push(@local).should eql(:created => ["subdir", "subdir/foo.txt"], :deleted => [], :updated => [])
|
152
|
+
make_file "#{@local}/subdir/foo.txt"
|
153
|
+
Dbox.push(@local).should eql(:created => ["subdir", "subdir/foo.txt"], :deleted => [], :updated => [], :failed => [])
|
154
154
|
end
|
155
155
|
|
156
156
|
it "should be able to push a new file in an existing dir" do
|
157
157
|
Dbox.create(@remote, @local)
|
158
158
|
mkdir "#{@local}/subdir"
|
159
159
|
Dbox.push(@local)
|
160
|
-
|
161
|
-
Dbox.push(@local).should eql(:created => ["subdir/foo.txt"], :deleted => [], :updated => [])
|
160
|
+
make_file "#{@local}/subdir/foo.txt"
|
161
|
+
Dbox.push(@local).should eql(:created => ["subdir/foo.txt"], :deleted => [], :updated => [], :failed => [])
|
162
162
|
end
|
163
163
|
|
164
164
|
it "should create the remote dir if it is missing" do
|
165
165
|
Dbox.create(@remote, @local)
|
166
|
-
|
166
|
+
make_file "#{@local}/foo.txt"
|
167
167
|
@new_name = randname()
|
168
168
|
@new_remote = File.join(REMOTE_TEST_PATH, @new_name)
|
169
169
|
db = Dbox::Database.load(@local)
|
170
170
|
db.update_metadata(:remote_path => @new_remote)
|
171
|
-
Dbox.push(@local).should eql(:created => ["foo.txt"], :deleted => [], :updated => [])
|
171
|
+
Dbox.push(@local).should eql(:created => ["foo.txt"], :deleted => [], :updated => [], :failed => [])
|
172
172
|
end
|
173
173
|
|
174
174
|
it "should not re-download the file after creating" do
|
175
175
|
Dbox.create(@remote, @local)
|
176
|
-
|
177
|
-
Dbox.push(@local).should eql(:created => ["foo.txt"], :deleted => [], :updated => [])
|
178
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [""])
|
176
|
+
make_file "#{@local}/foo.txt"
|
177
|
+
Dbox.push(@local).should eql(:created => ["foo.txt"], :deleted => [], :updated => [], :failed => [])
|
178
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [""], :failed => [])
|
179
179
|
end
|
180
180
|
|
181
181
|
it "should not re-download the file after updating" do
|
182
182
|
Dbox.create(@remote, @local)
|
183
|
-
|
184
|
-
Dbox.push(@local).should eql(:created => ["foo.txt"], :deleted => [], :updated => [])
|
185
|
-
|
186
|
-
|
187
|
-
Dbox.
|
183
|
+
make_file "#{@local}/foo.txt"
|
184
|
+
Dbox.push(@local).should eql(:created => ["foo.txt"], :deleted => [], :updated => [], :failed => [])
|
185
|
+
sleep 1 # need to wait for timestamp to change before writing same file
|
186
|
+
make_file "#{@local}/foo.txt"
|
187
|
+
Dbox.push(@local).should eql(:created => [], :deleted => [], :updated => ["foo.txt"], :failed => [])
|
188
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [""], :failed => [])
|
188
189
|
end
|
189
190
|
|
190
191
|
it "should not re-download the dir after creating" do
|
191
192
|
Dbox.create(@remote, @local)
|
192
193
|
mkdir "#{@local}/subdir"
|
193
|
-
Dbox.push(@local).should eql(:created => ["subdir"], :deleted => [], :updated => [])
|
194
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [""])
|
194
|
+
Dbox.push(@local).should eql(:created => ["subdir"], :deleted => [], :updated => [], :failed => [])
|
195
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [""], :failed => [])
|
195
196
|
end
|
196
197
|
|
197
198
|
it "should handle a complex set of changes" do
|
198
199
|
Dbox.create(@remote, @local)
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
Dbox.push(@local).should eql(:created => ["bar.txt", "baz.txt", "foo.txt"], :deleted => [], :updated => [])
|
200
|
+
make_file "#{@local}/foo.txt"
|
201
|
+
make_file "#{@local}/bar.txt"
|
202
|
+
make_file "#{@local}/baz.txt"
|
203
|
+
Dbox.push(@local).should eql(:created => ["bar.txt", "baz.txt", "foo.txt"], :deleted => [], :updated => [], :failed => [])
|
204
|
+
sleep 1 # need to wait for timestamp to change before writing same file
|
203
205
|
mkdir "#{@local}/subdir"
|
204
|
-
|
206
|
+
make_file "#{@local}/subdir/one.txt"
|
205
207
|
rm "#{@local}/foo.txt"
|
206
|
-
|
207
|
-
Dbox.push(@local).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => ["foo.txt"], :updated => ["baz.txt"])
|
208
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => ["", "subdir"])
|
208
|
+
make_file "#{@local}/baz.txt"
|
209
|
+
Dbox.push(@local).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => ["foo.txt"], :updated => ["baz.txt"], :failed => [])
|
210
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => ["", "subdir"], :failed => [])
|
209
211
|
end
|
210
212
|
|
211
213
|
it "should be able to handle crazy filenames" do
|
212
214
|
Dbox.create(@remote, @local)
|
213
215
|
crazy_name1 = '=+!@# $%^&*()[]{}<>_-|:?,\'~".txt'
|
214
216
|
crazy_name2 = '[ˈdɔʏtʃ].txt'
|
215
|
-
|
216
|
-
|
217
|
-
Dbox.push(@local).should eql(:created => [crazy_name1, crazy_name2], :deleted => [], :updated => [])
|
217
|
+
make_file "#{@local}/#{crazy_name1}"
|
218
|
+
make_file "#{@local}/#{crazy_name2}"
|
219
|
+
Dbox.push(@local).should eql(:created => [crazy_name1, crazy_name2], :deleted => [], :updated => [], :failed => [])
|
218
220
|
rm_rf @local
|
219
|
-
Dbox.clone(@remote, @local).should eql(:created => [crazy_name1, crazy_name2], :deleted => [], :updated => [""])
|
221
|
+
Dbox.clone(@remote, @local).should eql(:created => [crazy_name1, crazy_name2], :deleted => [], :updated => [""], :failed => [])
|
220
222
|
end
|
221
223
|
|
222
224
|
it "should be able to handle crazy directory names" do
|
223
225
|
Dbox.create(@remote, @local)
|
224
226
|
crazy_name1 = "Day[J] #42"
|
225
227
|
mkdir File.join(@local, crazy_name1)
|
226
|
-
|
227
|
-
Dbox.push(@local).should eql(:created => [crazy_name1, File.join(crazy_name1, "foo.txt")], :deleted => [], :updated => [])
|
228
|
+
make_file File.join(@local, crazy_name1, "foo.txt")
|
229
|
+
Dbox.push(@local).should eql(:created => [crazy_name1, File.join(crazy_name1, "foo.txt")], :deleted => [], :updated => [], :failed => [])
|
228
230
|
rm_rf @local
|
229
|
-
Dbox.clone(@remote, @local).should eql(:created => [crazy_name1, File.join(crazy_name1, "foo.txt")], :deleted => [], :updated => [""])
|
231
|
+
Dbox.clone(@remote, @local).should eql(:created => [crazy_name1, File.join(crazy_name1, "foo.txt")], :deleted => [], :updated => [""], :failed => [])
|
230
232
|
end
|
231
233
|
end
|
232
234
|
|
@@ -280,24 +282,25 @@ describe Dbox do
|
|
280
282
|
@alternate = "#{ALTERNATE_LOCAL_TEST_PATH}/#{@name}"
|
281
283
|
Dbox.clone(@remote, @alternate)
|
282
284
|
|
283
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [])
|
285
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => [], :updated => [], :failed => [])
|
284
286
|
|
285
287
|
mkdir "#{@local}/subdir"
|
286
|
-
|
287
|
-
Dbox.push(@local).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => [], :updated => [])
|
288
|
+
make_file "#{@local}/subdir/one.txt"
|
289
|
+
Dbox.push(@local).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => [], :updated => [], :failed => [])
|
288
290
|
|
289
|
-
Dbox.pull(@alternate).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => [], :updated => [""])
|
291
|
+
Dbox.pull(@alternate).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => [], :updated => [""], :failed => [])
|
290
292
|
|
291
293
|
rm_rf "#{@alternate}/subdir"
|
292
|
-
Dbox.push(@alternate).should eql(:created => [], :deleted => ["subdir"], :updated => [])
|
294
|
+
Dbox.push(@alternate).should eql(:created => [], :deleted => ["subdir"], :updated => [], :failed => [])
|
293
295
|
|
294
|
-
Dbox.pull(@local).should eql(:created => [], :deleted => ["subdir"], :updated => [""])
|
296
|
+
Dbox.pull(@local).should eql(:created => [], :deleted => ["subdir"], :updated => [""], :failed => [])
|
295
297
|
|
298
|
+
sleep 1 # need to wait for timestamp to change before writing same file
|
296
299
|
mkdir "#{@local}/subdir"
|
297
|
-
|
298
|
-
Dbox.push(@local).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => [], :updated => [])
|
300
|
+
make_file "#{@local}/subdir/one.txt"
|
301
|
+
Dbox.push(@local).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => [], :updated => [], :failed => [])
|
299
302
|
|
300
|
-
Dbox.pull(@alternate).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => [], :updated => [""])
|
303
|
+
Dbox.pull(@alternate).should eql(:created => ["subdir", "subdir/one.txt"], :deleted => [], :updated => [""], :failed => [])
|
301
304
|
end
|
302
305
|
end
|
303
306
|
end
|
data/spec/spec_helper.rb
CHANGED
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:
|
4
|
+
hash: 13
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 3
|
10
|
+
version: 0.5.3
|
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: 2011-
|
18
|
+
date: 2011-11-04 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: multipart-post
|
@@ -163,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
163
|
requirements: []
|
164
164
|
|
165
165
|
rubyforge_project:
|
166
|
-
rubygems_version: 1.8.
|
166
|
+
rubygems_version: 1.8.11
|
167
167
|
signing_key:
|
168
168
|
specification_version: 3
|
169
169
|
summary: Dropbox made easy.
|