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.
| Counting the Days Since an Arbitrary Date | ||
|---|---|---|
| Code | Expected | Actual |
def last_modified(file)
t1 = File.stat(file).ctime
t2 = Time.now
elapsed = (t2-t1)/(60*60*24)
puts "#{file} was last modified #{elapsed} days ago."
end
last_modified("/etc/passwd") |
/etc/passwd was last modified 125.873605469919 days ago. |
/etc/passwd was last modified 37.6953376619329 days ago. |
last_modified("/home/leonardr/") |
/home/leonardr/ was last modified 0.113293513796296 days ago. |
/home/leonardr/ was last modified 0.0442960046180556 days ago. |
require 'date'
def advent_calendar(date=DateTime.now)
christmas = DateTime.new(date.year, 12, 25)
christmas = DateTime.new(date.year+1, 12, 25) if date > christmas
difference = (christmas-date).to_i
if difference == 0
puts "Today is Christmas."
else
puts "Only #{difference} day#{"s" unless difference==1} until Christmas."
end
end
advent_calendar(DateTime.new(2006, 12, 24)) |
Only 1 day until Christmas. |
Only 1 day until Christmas. |
advent_calendar(DateTime.new(2006, 12, 25)) |
Today is Christmas. |
Today is Christmas. |
advent_calendar(DateTime.new(2006, 12, 26)) |
Only 364 days until Christmas. |
Only 364 days until Christmas. |
sent = DateTime.new(2006, 10, 4, 3, 15)
received = DateTime.new(2006, 10, 5, 16, 33)
elapsed = (received-sent) * 24
puts "You responded to my email #{elapsed.to_f} hours after I sent it." |
You responded to my email 37.3 hours after I sent it. |
You responded to my email 37.3 hours after I sent it. |
require 'date'
def remaining(date, event)
intervals = [["day", 1], ["hour", 24], ["minute", 60], ["second", 60]]
elapsed = DateTime.now - date
tense = elapsed > 0 ? "since" : "until"
interval = 1.0
parts = intervals.collect do |name, new_interval|
interval /= new_interval
number, elapsed = elapsed.abs.divmod(interval)
"#{number.to_i} #{name}#{"s" unless number == 1}"
end
puts "#{parts.join(", ")} #{tense} #{event}."
end
remaining(DateTime.new(2006, 4, 15, 0, 0, 0, DateTime.now.offset),
"the book deadline") |
27 days, 4 hours, 16 minutes, 9 seconds until the book deadline. |
0 days, 6 hours, 27 minutes, 39 seconds until the book deadline. |
remaining(DateTime.new(1999, 4, 23, 8, 0, 0, DateTime.now.offset),
"the Math 114A final") |
2521 days, 11 hours, 43 minutes, 50 seconds since the Math 114A final. |
2548 days, 9 hours, 32 minutes, 20 seconds since the Math 114A final. |