Utility class for ranges of times (time periods). It's like Range, but has additional enumeration capabilities. See examples for the tasty stuff.
Examples
period = TimeRange.new(1.year.ago, Time.now)
Enumerate by days
period.each(:day) { |time| puts time }
Enumerate by weeks
period.each(:week) { |time| puts time }
(also years, months, hours, minutes and seconds)
Enumerate by custom period
period.each(42.seconds) { |time| puts time }
+each+ Returns Enumerator object, so this is also possible (extra yummy):
period.each(:month).map { |time| time.strftime('%B') }
Supports all Enumerable interface: find, select, reject, inject, etc.