diff --git a/lib/remote_storage/swift.rb b/lib/remote_storage/swift.rb index 4c42e10..197d1f8 100644 --- a/lib/remote_storage/swift.rb +++ b/lib/remote_storage/swift.rb @@ -128,7 +128,7 @@ module RemoteStorage # TODO get last modified from response and add to metadata metadata = { etag: res.headers[:etag], - size: data.length, + size: data.size, type: content_type } @@ -264,9 +264,18 @@ module RemoteStorage parent_directories end + def parent_directory_for(directory) + if directory.match(/\//) + return directory[0..directory.rindex("/")-1] + elsif directory != "" + return "/" + end + end + def update_metadata_object(user, directory, key, metadata) - key = "rs_meta:#{user}:#{directory}/#{key}" - redis.hmset(key, *metadata) + redis_key = "rs_meta:#{user}:#{directory}/#{key}" + redis.hmset(redis_key, *metadata) + redis.sadd "rs_meta:#{user}:#{directory}/:items", key end def update_dir_objects(user, directory) @@ -278,6 +287,7 @@ module RemoteStorage key = "rs_meta:#{user}:#{dir}/" metadata = {etag: res.headers[:etag], modified: timestamp} redis.hmset(key, *metadata) + redis.sadd "rs_meta:#{user}:#{parent_directory_for(dir)}:items", "#{dir}/" end true diff --git a/spec/swift/app_spec.rb b/spec/swift/app_spec.rb index fdbc39b..84bb9ff 100644 --- a/spec/swift/app_spec.rb +++ b/spec/swift/app_spec.rb @@ -39,6 +39,7 @@ describe "App" do RemoteStorage::Swift.stub_any_instance :has_name_collision?, false do RestClient.stub :put, put_stub do put "/phil/food/aguacate", "si" + put "/phil/food/camaron", "yummi" end end @@ -46,6 +47,12 @@ describe "App" do metadata["etag"].must_equal "bla" metadata["modified"].length.must_equal 13 metadata = redis.hgetall "rs_meta:phil:food/" + + food_items = redis.smembers "rs_meta:phil:food/:items" + food_items.must_equal ["camaron", "aguacate"] + + root_items = redis.smembers "rs_meta:phil:/:items" + root_items.must_equal ["food/"] end end end