I could use:
File.open('/dev/null', 'w')
on Unix systems, but if there is a Ruby way to achieve this, I'd like to use it. I am just looking for an I/O stream, that immediately "trashes" all writes, kind of like a null-object.
I could use:
File.open('/dev/null', 'w')
on Unix systems, but if there is a Ruby way to achieve this, I'd like to use it. I am just looking for an I/O stream, that immediately "trashes" all writes, kind of like a null-object.
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.
def <<(o); self end
to work properly (otherwise null_stream << foo << bar
will break). –
Harvard 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.
STDNULL = File.open(File::NULL, 'w')
then I use STDNULL every where –
Forgery 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'
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.
def <<(o); self end
to work properly (otherwise null_stream << foo << bar
will break). –
Harvard There's a gem called devnull
Ruby implementation of null file (like /dev/null on Un*x, NUL on Windows)
It doesn't interact with the null file, but instead has dummy methods for all the methods that IO objects implement.
© 2022 - 2024 — McMap. All rights reserved.