lib/random_data/dates.rb in random_data-1.1.0 vs lib/random_data/dates.rb in random_data-1.2.0

- old
+ new

@@ -4,18 +4,44 @@ # Defines methods for random date generation module Dates - # Returns a date within a specified range of days (plus or minus half what you specify). The default is ten days, so by default you will - # get a date within plus or minus five days of today. + # Returns a date within a specified range of days. If dayrange is an Integer, then the date + # returned will be plus or minus half what you specify. The default is ten days, so by default + # you will get a date within plus or minus five days of today. # + # If dayrange is a Range, then you will get a date the falls between that range + # # Example: # - # >> Random.date.to_s = "2007-09-16" - + # Random.date # => a Date +/- 5 days of today + # Random.date(20) # => a Date +/- 10 days of today + # Random.date(-60..-30) # => a Date between 60 days ago and 30 days ago + # def date(dayrange=10) - (Date.today + (rand(dayrange*2) - dayrange)) + if dayrange.is_a?(Range) + offset = rand(dayrange.max-dayrange.min) + dayrange.min + else + offset = rand(dayrange*2) - dayrange + end + Date.today + offset + end + + # Returns a date within the specified Range. The Range can be Date or String objects. + # + #Example: + # min = Date.parse('1966-11-15') + # max = Date.parse('1990-01-01') + # Random.date(min..max) # => a Date between 11/15/1996 and 1/1/1990 + # Random.date('1966-11-15'..'1990-01-01') # => a Date between 11/15/1996 and 1/1/1990 + # + def date_between(range) + min_date = range.min.is_a?(Date) ? range.min : Date.parse(range.min) + max_date = range.max.is_a?(Date) ? range.max : Date.parse(range.max) + + diff = (max_date - min_date).to_i + min_date + rand(diff) end end end \ No newline at end of file