Determine correct metadata key for objects in root dir
This commit is contained in:
parent
1c0bd18915
commit
3590b7dedc
@ -133,7 +133,7 @@ module RemoteStorage
|
|||||||
server.halt 400 if server.env["HTTP_CONTENT_RANGE"]
|
server.halt 400 if server.env["HTTP_CONTENT_RANGE"]
|
||||||
server.halt 409 if has_name_collision?(user, directory, key)
|
server.halt 409 if has_name_collision?(user, directory, key)
|
||||||
|
|
||||||
existing_metadata = redis.hgetall "rs:m:#{user}:#{directory}/#{key}"
|
existing_metadata = redis.hgetall redis_metadata_object_key(user, directory, key)
|
||||||
url = url_for_key(user, directory, key)
|
url = url_for_key(user, directory, key)
|
||||||
|
|
||||||
if required_match = server.env["HTTP_IF_MATCH"]
|
if required_match = server.env["HTTP_IF_MATCH"]
|
||||||
@ -309,7 +309,7 @@ module RemoteStorage
|
|||||||
end
|
end
|
||||||
|
|
||||||
def update_metadata_object(user, directory, key, metadata)
|
def update_metadata_object(user, directory, key, metadata)
|
||||||
redis_key = "rs:m:#{user}:#{directory}/#{key}"
|
redis_key = redis_metadata_object_key(user, directory, key)
|
||||||
redis.hmset(redis_key, *metadata)
|
redis.hmset(redis_key, *metadata)
|
||||||
redis.sadd "rs:m:#{user}:#{directory}/:items", key
|
redis.sadd "rs:m:#{user}:#{directory}/:items", key
|
||||||
|
|
||||||
@ -328,8 +328,7 @@ module RemoteStorage
|
|||||||
end
|
end
|
||||||
|
|
||||||
def delete_metadata_objects(user, directory, key)
|
def delete_metadata_objects(user, directory, key)
|
||||||
redis_key = "rs:m:#{user}:#{directory}/#{key}"
|
redis.del redis_metadata_object_key(user, directory, key)
|
||||||
redis.del(redis_key)
|
|
||||||
redis.srem "rs:m:#{user}:#{directory}/:items", key
|
redis.srem "rs:m:#{user}:#{directory}/:items", key
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -353,6 +352,10 @@ module RemoteStorage
|
|||||||
redis.smembers("rs:m:#{user}:#{dir}/:items").empty?
|
redis.smembers("rs:m:#{user}:#{dir}/:items").empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def redis_metadata_object_key(user, directory, key)
|
||||||
|
"rs:m:#{user}:#{[directory, key].delete_if(&:empty?).join("/")}"
|
||||||
|
end
|
||||||
|
|
||||||
def container_url_for(user)
|
def container_url_for(user)
|
||||||
"#{base_url}/#{container_for(user)}"
|
"#{base_url}/#{container_for(user)}"
|
||||||
end
|
end
|
||||||
|
@ -74,6 +74,32 @@ describe "App" do
|
|||||||
root_items.must_equal ["food/"]
|
root_items.must_equal ["food/"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "objects in root dir" do
|
||||||
|
before do
|
||||||
|
put_stub = OpenStruct.new(headers: {
|
||||||
|
etag: "bla",
|
||||||
|
last_modified: "Fri, 04 Mar 2016 12:20:18 GMT"
|
||||||
|
})
|
||||||
|
|
||||||
|
RestClient.stub :put, put_stub do
|
||||||
|
put "/phil/bamboo.txt", "shir kan"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "are listed in the directory listing with all metadata" do
|
||||||
|
get "phil/"
|
||||||
|
|
||||||
|
last_response.status.must_equal 200
|
||||||
|
last_response.content_type.must_equal "application/json"
|
||||||
|
|
||||||
|
content = JSON.parse(last_response.body)
|
||||||
|
content["items"]["bamboo.txt"].wont_be_nil
|
||||||
|
content["items"]["bamboo.txt"]["ETag"].must_equal "bla"
|
||||||
|
content["items"]["bamboo.txt"]["Content-Type"].must_equal "text/plain; charset=utf-8"
|
||||||
|
content["items"]["bamboo.txt"]["Content-Length"].must_equal 8
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "name collision checks" do
|
describe "name collision checks" do
|
||||||
it "is successful when there is no name collision" do
|
it "is successful when there is no name collision" do
|
||||||
put_stub = OpenStruct.new(headers: {
|
put_stub = OpenStruct.new(headers: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user