 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Pretending a String is a File | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'stringio'
s = StringIO.new %{I am the very model of a modern major general.
I've information vegetable, animal, and mineral.}
s.pos | 0 | 0 | 
| s.each_line { |x| puts x } | I am the very model of a modern major general. I've information vegetable, animal, and mineral. | I am the very model of a modern major general. I've information vegetable, animal, and mineral. | 
| s.eof? | true | true | 
| s.pos | 95 | 95 | 
| s.rewind s.pos | 0 | 0 | 
| s.grep /general/ | ["I am the very model of a modern major general.\n"] | ["I am the very model of a modern major general.\n"] | 
| s = StringIO.new
s.write('Treat it like a file.')
s.rewind
s.write("Act like it's")
s.string | "Act like it's a file." | "Act like it's a file." | 
| require 'yaml' s = StringIO.new YAML.dump(['A list of', 3, :items], s) puts s.string | --- - A list of - 3 - :items | --- - A list of - 3 - :items | 
| def make_more_interesting(io)
  io << "... OF DOOM!"
end
make_more_interesting("Cherry pie") | "Cherry pie... OF DOOM!" | "Cherry pie... OF DOOM!" | 
| open('interesting_things', 'w') do |f|
  f.write("Nightstand")
  make_more_interesting(f)
end
open('interesting_things') { |f| f.read } | "Nightstand... OF DOOM!" | "Nightstand... OF DOOM!" | 
| poem = %{The boy stood on the burning deck
Whence all but he had fled
He'd stayed above to wash his neck
Before he went to bed}
output = open("poem", "w")
output.write(poem)
output.close
input = open("poem")
poem.grep /ed$/ | ["Whence all but he had fled\n", "Before he went to bed"] | ["Whence all but he had fled\n", "Before he went to bed"] | 
| input.grep /ed$/ | ["Whence all but he had fled\n", "Before he went to bed"] | ["Whence all but he had fled\n", "Before he went to bed"] | 
| input.grep /ed$/ | [] | [] | 
| input.rewind input.grep /ed$/ | ["Whence all but he had fled\n", "Before he went to bed"] | ["Whence all but he had fled\n", "Before he went to bed"] | 
| def fifth_byte(file)
  file.seek(5)
  file.read(1)
end
fifth_byte("123456") | NoMethodError: undefined method `seek' for "123456":String ... | NoMethodError: undefined method `seek' for "123456":String from (irb):43:in `fifth_byte' from (irb):46 | 
| fifth_byte(StringIO.new("123456")) | "6" | "6" | 
| def file_operation(io) io = StringIO(io) if io.respond_to? :to_str && !io.is_a? StringIO #Do the file operation... end s = StringIO.new s << "A string" s.read s << ", and more." s.rewind s.read | "A string, and more." | "A string, and more." |