app/models/concen/grid_file.rb in concen-0.1.2 vs app/models/concen/grid_file.rb in concen-0.1.3

- old
+ new

@@ -40,20 +40,28 @@ grid = Mongo::Grid.new(Mongoid.database) grid.get(self.grid_id).content_type.include?("text") || grid.get(self.grid_id).content_type.include?("javascript") end def store(content, filename) - original_filename = filename.dup - file_extension = File.extname(filename).downcase - filename = "#{self.id.to_s}-#{File.basename(original_filename, file_extension).downcase.parameterize.gsub("_", "-")}#{file_extension}" grid = Mongo::Grid.new(Mongoid.database) - content_type = MIME::Types.type_for(filename).first.to_s - if self.grid_id - grid.delete(self.grid_id) - end - if grid_id = grid.put(content, :content_type => content_type, :filename => filename, :safe => true) - self.update_attributes(:filename => filename, :original_filename => original_filename, :grid_id => grid_id) + + # First, delete if a GridFS file already exists. + # There is no update. + grid.delete(self.grid_id) if self.grid_id + + original_filename = filename.dup + file_extension = File.extname(original_filename).downcase + content_type = MIME::Types.type_for(original_filename).first.to_s + + # Pre generate ObjectId for the new GridFS file. + grid_id = BSON::ObjectId.new + + filename = File.basename(original_filename, file_extension).downcase.parameterize.gsub("_", "-") + filename = "#{grid_id.to_s}-#{filename}#{file_extension}" + + if grid.put(content, :_id => grid_id, :filename => filename, :content_type => content_type, :safe => true) + self.update_attributes(:grid_id => grid_id, :filename => filename, :original_filename => original_filename) else return false end end @@ -62,6 +70,6 @@ def destroy_gridfs grid = Mongo::Grid.new(Mongoid.database) grid.delete(self.grid_id) end end -end \ No newline at end of file +end