Is there something like a null-stream in Ruby?

There's stringIO, which I find useful when I want to introduce a dummy filestream:

require "stringio"
f = StringIO.new
f.gets # => nil

And here's some code from heckle that finds the bit bucket for both Unix and Windows, slightly modified:

# Is this platform MS Windows-like?
# Actually, I suspect the following line is not very reliable.
WINDOWS = RUBY_PLATFORM =~ /mswin/
# Path to the bit bucket.
NULL_PATH = WINDOWS ? 'NUL:' : '/dev/null'

If you want the full behavior of streams, the best is probably to use:

File.open(File::NULL, "w")

Note that File::NULL is new to Ruby 1.9.3; you can use my backports gem:

require 'backports/1.9.3/file/null' # => Won't do anything in 1.9.3+
File.open(File::NULL, "w")          # => works even in Ruby 1.8.6

You could also copy the relevant code if you prefer.


No, I don't believe there is anything like a null stream in Ruby, at least in earlier versions. In that case, you must make one yourself. Depending on the methods that it will call, you will need to write stub methods on the null stream class, like this:

class NullStream
   def <<(o); self; end
end

The above example is by no means complete. For example, some streams may require calling the write, puts or other methods. Moreover, some methods should be implemented by returning self in their methods, like <<, others not.

Tags:

Ruby

Stream