0
0
Fork 0

some refactor of the code

This commit is contained in:
Gibheer 2011-05-30 20:19:05 +02:00
parent d5057a5a26
commit 90a13feab4
1 changed files with 58 additions and 25 deletions

View File

@ -52,32 +52,15 @@ class Polecat
# Write all stored documents to the disc and clear the buffer.
# @return [Boolean] true when the write was a success
def write
lock_path = @path + '/index.lock'
if File.exists?(lock_path)
return false
else
FileUtils.touch(lock_path)
last_file = Dir[@path + '/*.ind'].sort.last
if last_file.nil?
file_name = @path + '/ind0.ind'
else
number = File.basename(last_file).match(/[0-9]+/)[0].to_i
# we have to match the complete name, because there can be
# numbers before the file too
file_name = last_file.gsub(
/ind#{number}\.ind/,
"ind#{(number + 1)}.ind"
)
end
File.open file_name, 'w' do |file|
file.write Marshal.dump(@documents)
end
@documents = []
FileUtils.rm lock_path
return true
return false unless set_lock
file_name = generate_filename
File.open file_name, 'w' do |file|
file.write Marshal.dump(@documents)
end
@documents = []
release_lock
end
# creates an index reader with the writers path
@ -86,5 +69,55 @@ class Polecat
def create_reader
Polecat::IndexReader.new @path
end
# set the lock on the index
# @private
def set_lock
if File.exists? lock_file_name
false
else
FileUtils.touch lock_file_name
true
end
end
private :set_lock
# release the index lock
# @private
def release_lock
if File.exists? lock_file_name
FileUtils.rm lock_file_name
true
else
false
end
end
private :release_lock
# get the full path of the lock file
# @private
def lock_file_name
@path + '/index.lock'
end
private :lock_file_name
# generates a new file name for an index file
# @private
def generate_filename
last_file = Dir[@path + '/*.ind'].sort.last
if last_file.nil?
file_name = @path + '/ind0.ind'
else
number = File.basename(last_file).match(/[0-9]+/)[0].to_i
# we have to match the complete name, because there can be
# numbers before the file too
file_name = last_file.gsub(
/ind#{number}\.ind/,
"ind#{(number + 1)}.ind"
)
end
file_name
end
private :generate_filename
end
end