def open(filename, mode, opts={})
opts = opts.dup
opts.merge!(default_grid_io_opts(filename))
if mode == 'w'
begin
@files.ensure_index([['filename', 1], ['uploadDate', -1]])
@chunks.ensure_index([['files_id', Mongo::ASCENDING], ['n', Mongo::ASCENDING]], :unique => true)
versions = opts.delete(:versions)
if opts.delete(:delete_old) || (versions && versions < 1)
versions = 1
end
rescue Mongo::ConnectionFailure => e
raise e, "Failed to create necessary indexes and write data."
return
end
end
file = GridIO.new(@files, @chunks, filename, mode, opts)
return file unless block_given?
result = nil
begin
result = yield file
ensure
id = file.close
if versions
self.delete do
@files.find({'filename' => filename, '_id' => {'$ne' => id}}, :fields => ['_id'], :sort => ['uploadDate', -1], :skip => (versions - 1))
end
end
end
result
end