Rails, if you’ve used it, has a rather elegant way of manipulating time. Stuff like 1.hours
and 2.minutes.from_now
just work. Let’s see how Ruby modules can be extended really really easily:
#! /usr/bin/env ruby class Integer def seconds self end def minutes seconds * 60 end def hours minutes * 60 end def days hours * 24 end def months days * 30 end def years months * 12 end def from_now Time.now + self end def before Time.now - self end end class String def palindrome? self == self.reverse end end class Time def leap_year? (year % 4).zero? and ((not (year % 100).zero?) or (year % 1000).zero?) end end class TrueClass def say "is" end end class FalseClass def say "is not" end end #2 is an Integer puts 2.minutes.from_now #"vishnu" is a String puts "vishnu".palindrome? puts "malayalam".palindrome? puts 2.years.from_now.leap_year? #Check if n years before is a leap year puts "How many years before?" year = Integer(readline) puts "#{Time.now.year - year} #{year.years.before.leap_year?.say} a leap year."
The interesting thing about Ruby is not that metaprogramming is possible, but Ruby makes it really easy to do it.
Leave a Reply