Create unique cache dir to prevent race conditions. Issue #344.
This commit is contained in:
@@ -18,7 +18,7 @@ class CacheFileStore
|
|||||||
# YAML is Human Readable, contrary to Marshal which store in a binary format
|
# YAML is Human Readable, contrary to Marshal which store in a binary format
|
||||||
# Marshal does not need any "require"
|
# Marshal does not need any "require"
|
||||||
def initialize(storage_path, serializer = Marshal)
|
def initialize(storage_path, serializer = Marshal)
|
||||||
@storage_path = File.expand_path(storage_path)
|
@storage_path = File.expand_path(storage_path + '/' + storage_dir)
|
||||||
@serializer = serializer
|
@serializer = serializer
|
||||||
|
|
||||||
# File.directory? for ruby <= 1.9 otherwise,
|
# File.directory? for ruby <= 1.9 otherwise,
|
||||||
@@ -58,4 +58,11 @@ class CacheFileStore
|
|||||||
File::join(@storage_path, key)
|
File::join(@storage_path, key)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def storage_dir
|
||||||
|
time = Time.now
|
||||||
|
random = (0...8).map { (65 + rand(26)).chr }.join
|
||||||
|
|
||||||
|
Digest::MD5.hexdigest("#{time}#{random}")
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ describe CacheFileStore do
|
|||||||
|
|
||||||
describe '#storage_path' do
|
describe '#storage_path' do
|
||||||
it 'returns the storage path given in the #new' do
|
it 'returns the storage path given in the #new' do
|
||||||
@cache.storage_path.should == cache_dir
|
@cache.storage_path.should match(/#{cache_dir}/)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -32,12 +32,12 @@ describe CacheFileStore do
|
|||||||
it "should remove all files from the cache dir (#{@cache_dir}" do
|
it "should remove all files from the cache dir (#{@cache_dir}" do
|
||||||
# let's create some files into the directory first
|
# let's create some files into the directory first
|
||||||
(0..5).each do |i|
|
(0..5).each do |i|
|
||||||
File.new(cache_dir + "/file_#{i}.txt", File::CREAT)
|
File.new(@cache.storage_path + "/file_#{i}.txt", File::CREAT)
|
||||||
end
|
end
|
||||||
|
|
||||||
count_files_in_dir(cache_dir, 'file_*.txt').should == 6
|
count_files_in_dir(@cache.storage_path, 'file_*.txt').should == 6
|
||||||
@cache.clean
|
@cache.clean
|
||||||
count_files_in_dir(cache_dir).should == 0
|
count_files_in_dir(@cache.storage_path).should == 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -70,4 +70,16 @@ describe CacheFileStore do
|
|||||||
|
|
||||||
## TODO write / read for an object
|
## TODO write / read for an object
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#storage_dir' do
|
||||||
|
it 'should create a unique storage dir' do
|
||||||
|
storage_dirs = []
|
||||||
|
|
||||||
|
(1..5).each do |i|
|
||||||
|
storage_dirs << CacheFileStore.new(cache_dir).storage_path
|
||||||
|
end
|
||||||
|
|
||||||
|
storage_dirs.uniq.size.should == 5
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user