Ruby - Creating a file in memory Ruby - Creating a file in memory ruby ruby

Ruby - Creating a file in memory


You could use Tempfile.Tempfile writes the file to disc, so it does not fit your request.

But I think Tempfile provides some features you need:

When a Tempfile object is garbage collected, or when the Ruby interpreter exits, its associated temporary file is automatically deleted.

Example:

require 'tempfile'require 'csv'data_for_report = [1,2,3,4]temp_file = Tempfile.new('foo')CSV.open(temp_file, "w") do |csv|  csv << data_for_reportend


Try one of the mmap gems. If the library only takes a filename, that's your option.

If it can accept a file-like object, however, you can use a StringIO.

You might consider changing whatever Reports is, making it more general-purpose. It depends on what it's using to create its mail message–this might be trivial.


With your current code that's not possible, if your code would use file pointers/handles instead you can do the following:

require 'csv'require 'stringio'data_for_report = [1,2,3,4]temp_file = StringIO.new # creates a fake file as string.CSV.new(temp_file, "w") do |csv|  csv << data_for_reportend

The key problem why it isn't working for your usecase is the line Reports.report users temp_file

If that accepts a handle instead of a string it'll work.

See also this SO: https://stackoverflow.com/a/19110958/887836