filesystem/argf_streams.rb
tests/_examples/filesystem/argf_streams.rb in the metorex repository.
# A stream over a list of names reads the files as though they were one. It
# walks bytes, characters and codepoints, reads a count into a buffer, and
# reads a file at a time when asked for part of one.
require "tmpdir"
first = File.join Dir.tmpdir, "metorex_argf_one.txt"
second = File.join Dir.tmpdir, "metorex_argf_two.txt"
File.write first, "one\n"
File.write second, "two\n"
walk = ARGF.class.new first, second
p walk.each_byte.first(4)
walk.close
walk = ARGF.class.new first, second
letters = []
walk.each_char { |letter| letters << letter }
p letters
walk = ARGF.class.new first, second
p walk.each_codepoint.to_a.length
walk = ARGF.class.new first, second
lines = []
walk.each_line { |line| lines << line }
p lines
walk = ARGF.class.new first, second
p walk.gets
p walk.filename == first
p walk.gets
p walk.gets
# A count reads from the file being read and stops there, and what is read
# lands in the buffer when one is handed over.
walk = ARGF.class.new first, second
buffer = +"held"
p walk.read(4, buffer)
p buffer
p walk.readpartial 4
p walk.readpartial 4
# The encodings the files are read as.
walk = ARGF.class.new first
walk.set_encoding "us-ascii"
p walk.external_encoding.to_s
p walk.gets.encoding.to_s
File.delete first
File.delete second
Output:
[111, 110, 101, 10]
["o", "n", "e", "\n", "t", "w", "o", "\n"]
8
["one\n", "two\n"]
"one\n"
true
"two\n"
nil
"one\n"
"one\n"
""
"two\n"
"US-ASCII"
"US-ASCII"