Delete all directory objects for empty directories
This commit is contained in:
parent
6f975c6c45
commit
8b2bd53d49
@ -82,9 +82,9 @@ module RemoteStorage
|
|||||||
|
|
||||||
def delete_data(user, directory, key)
|
def delete_data(user, directory, key)
|
||||||
riak_response = data_bucket.delete("#{user}:#{directory}:#{key}")
|
riak_response = data_bucket.delete("#{user}:#{directory}:#{key}")
|
||||||
if directory_entries(user, directory).empty?
|
|
||||||
directory_bucket.delete "#{user}:#{directory}"
|
delete_empty_directory_objects(user, directory)
|
||||||
end
|
|
||||||
halt riak_response[:code]
|
halt riak_response[:code]
|
||||||
rescue ::Riak::HTTPFailedRequest
|
rescue ::Riak::HTTPFailedRequest
|
||||||
halt 404
|
halt 404
|
||||||
@ -200,6 +200,27 @@ module RemoteStorage
|
|||||||
directory_object.store
|
directory_object.store
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delete_empty_directory_objects(user, directory)
|
||||||
|
parent_directories = directory.split("/")
|
||||||
|
|
||||||
|
while parent_directories.any?
|
||||||
|
parent_directory = parent_directories.join("/")
|
||||||
|
|
||||||
|
existing_files = directory_entries(user, parent_directory)
|
||||||
|
existing_subdirectories = sub_directories(user, parent_directory)
|
||||||
|
|
||||||
|
if existing_files.empty? && existing_subdirectories.empty?
|
||||||
|
directory_bucket.delete "#{user}:#{parent_directory}"
|
||||||
|
end
|
||||||
|
|
||||||
|
parent_directories.pop
|
||||||
|
end
|
||||||
|
|
||||||
|
if directory_entries(user, "").empty? && sub_directories(user, "").empty?
|
||||||
|
directory_bucket.delete "#{user}:"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def set_object_data(object, data)
|
def set_object_data(object, data)
|
||||||
if object.content_type[/^[^;\s]+/] == "application/json"
|
if object.content_type[/^[^;\s]+/] == "application/json"
|
||||||
data = "{}" if data.blank?
|
data = "{}" if data.blank?
|
||||||
|
|||||||
@ -241,17 +241,40 @@ describe "Directories" do
|
|||||||
context "last file in directory" do
|
context "last file in directory" do
|
||||||
before do
|
before do
|
||||||
directory_bucket.delete("jimmy:tasks")
|
directory_bucket.delete("jimmy:tasks")
|
||||||
put "/jimmy/tasks/trash", "take out the trash"
|
put "/jimmy/tasks/home/trash", "take out the trash"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "deletes the directory object" do
|
it "deletes the directory objects for all empty parent directories" do
|
||||||
delete "/jimmy/tasks/trash"
|
delete "/jimmy/tasks/home/trash"
|
||||||
|
|
||||||
last_response.status.must_equal 204
|
last_response.status.must_equal 204
|
||||||
|
|
||||||
|
lambda {
|
||||||
|
directory_bucket.get("jimmy:tasks/home")
|
||||||
|
}.must_raise Riak::HTTPFailedRequest
|
||||||
|
|
||||||
lambda {
|
lambda {
|
||||||
directory_bucket.get("jimmy:tasks")
|
directory_bucket.get("jimmy:tasks")
|
||||||
}.must_raise Riak::HTTPFailedRequest
|
}.must_raise Riak::HTTPFailedRequest
|
||||||
|
|
||||||
|
lambda {
|
||||||
|
directory_bucket.get("jimmy:")
|
||||||
|
}.must_raise Riak::HTTPFailedRequest
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with additional files in directory" do
|
||||||
|
before do
|
||||||
|
put "/jimmy/tasks/home/trash", "take out the trash"
|
||||||
|
put "/jimmy/tasks/home/laundry/washing", "wash the clothes"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not delete the directory objects for the parent directories" do
|
||||||
|
delete "/jimmy/tasks/home/trash"
|
||||||
|
|
||||||
|
directory_bucket.get("jimmy:tasks/home").wont_be_nil
|
||||||
|
directory_bucket.get("jimmy:tasks").wont_be_nil
|
||||||
|
directory_bucket.get("jimmy:").wont_be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -264,10 +264,6 @@ describe "Permissions" do
|
|||||||
it "allows PUT requests" do
|
it "allows PUT requests" do
|
||||||
put "/jimmy/1", "Gonna kick it root down"
|
put "/jimmy/1", "Gonna kick it root down"
|
||||||
|
|
||||||
# File.open('response.html', 'w') do |f|
|
|
||||||
# f.write last_response.body
|
|
||||||
# end
|
|
||||||
|
|
||||||
last_response.status.must_equal 200
|
last_response.status.must_equal 200
|
||||||
data_bucket.get("jimmy::1").data.must_equal "Gonna kick it root down"
|
data_bucket.get("jimmy::1").data.must_equal "Gonna kick it root down"
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user