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.

Checking When a File was Last Used
CodeExpectedActual
open("output", "w") { |f| f << "Here's some output.\n" }
stat = File.stat("output")
stat.mtime
Thu Mar 23 12:23:54 EST 2006 Mon Mar 27 17:59:10 EST 2006
stat.atime
Thu Mar 23 12:23:54 EST 2006 Mon Mar 27 17:59:10 EST 2006
sleep(2)
open("output", "a") { |f| f << "Here's some more output.\n" }
stat = File.stat("output")
stat.mtime
Thu Mar 23 12:23:56 EST 2006 Mon Mar 27 17:59:12 EST 2006
stat.atime
Thu Mar 23 12:23:54 EST 2006 Mon Mar 27 17:59:10 EST 2006
sleep(2)
open("output") { |f| contents = f.read }
stat = File.stat("output")
stat.mtime
Thu Mar 23 12:23:56 EST 2006 Mon Mar 27 17:59:12 EST 2006
stat.atime
Thu Mar 23 12:23:58 EST 2006 Mon Mar 27 17:59:14 EST 2006
def save_game(file)
  score = 1000
  open(file, "w") do |f|
    f.puts(score)
    f.puts(Time.new.to_i)
  end
end
def load_game(file)
  open(file) do |f|
    score = f.readline.to_i
    time = Time.at(f.readline.to_i)
    difference = (File.stat(file).mtime - time).abs    
    raise "I suspect you of cheating." if difference > 1
    "Your saved score is #{score}."
  end  
end
save_game("game.sav")
sleep(2)
load_game("game.sav")
"Your saved score is 1000." "Your saved score is 1000."
open("game.sav", "r+b") { |f| f.write("9") }
load_game("game.sav")
RuntimeError: I suspect you of cheating.
...
RuntimeError: I suspect you of cheating.
	from (irb):27:in `load_game'
	from (irb):23:in `load_game'
	from (irb):35