houdini/lib/timespan.rb

47 lines
1.2 KiB
Ruby
Raw Normal View History

# For tracking and calculating timespans/time intervals
# Relies on activesupport
Timespan = Struct.new(:interval, :time_unit) do
Units = ['week', 'day', 'month', 'year']
TimeUnits = {
'1_week' => 1.week.ago,
'2_weeks' => 2.weeks.ago,
'1_month' => 1.month.ago,
'3_months' => 3.months.ago,
'6_months' => 6.months.ago,
'1_year' => 1.year.ago,
'2_years' => 2.years.ago
}
# Test if end_date is past start_date by timespan
# eg: later_than_by?(Jun 13th, Jul 14th, 1.month) -> true
# Special case:
# later_than_by?(Jan 31st, Feb 28th, 1.month) -> true
def self.later_than_by?(start_date, end_date, timespan)
return (start_date + timespan) <= end_date
end
# Given an Integer (frequency) and a String (time unit),
# return the timespan object (ie. number of seconds) constituting the timespan
# timespan(1, 'minute') -> 60
# timespan(1, 'month') -> 2592000
def self.create(interval, time_unit)
raise(ArgumentError, "time_unit must be one of: #{Units}") unless Units.include?(time_unit)
return interval.send(time_unit.to_sym)
end
def self.in_future?(datetime)
datetime > Time.current
end
def self.date_now_or_in_future?(date)
date >= Date.today
end
def self.in_past?(date)
date < Time.current
end
end