class Cyclical::YearlyRule
holds daily rule configuration
Public Instance Methods
aligned?(time, base)
click to toggle source
check if time is aligned to a base time, including interval check
# File lib/cyclical/rules/yearly_rule.rb, line 8 def aligned?(time, base) return false unless (base.year - time.year).to_i % @interval == 0 return false unless [time.hour, time.min, time.sec] == [base.hour, base.min, base.sec] # the shortest filter we support is for days return false unless time.day == base.day || filters(:weekdays) || filters(:monthdays) || filters(:yeardays) return false unless time.month == base.month || filters(:yeardays) || filters(:weeks) || filters(:months) # wow, passed every test true end
step()
click to toggle source
default step of the rule
# File lib/cyclical/rules/yearly_rule.rb, line 19 def step @interval.years end
Private Instance Methods
align(time, base)
click to toggle source
# File lib/cyclical/rules/yearly_rule.rb, line 44 def align(time, base) day = (day_filters ? time.day : base.day) mon = (month_filters ? time.mon : base.mon) time = time.beginning_of_year + (mon - 1).months + (day - 1).days # compensate crossing DST barrier (oh my...) offset = time.beginning_of_day.utc_offset time = time.beginning_of_day + base.hour.hours + base.min.minutes + base.sec.seconds time += (offset - time.utc_offset) time end
day_filters()
click to toggle source
# File lib/cyclical/rules/yearly_rule.rb, line 58 def day_filters filters(:weekdays) || filters(:monthdays) || filters(:yeardays) end
month_filters()
click to toggle source
# File lib/cyclical/rules/yearly_rule.rb, line 62 def month_filters filters(:weekdays) || filters(:yeardays) || filters(:weeks) || filters(:months) end
potential_next(current, base)
click to toggle source
closest valid date
Calls superclass method
Cyclical::Rule#potential_next
# File lib/cyclical/rules/yearly_rule.rb, line 26 def potential_next(current, base) candidate = super(current, base) return candidate if (base.year - candidate.year).to_i % @interval == 0 years = ((base.year - candidate.year).to_i % @interval) (candidate + years.years).beginning_of_year end
potential_previous(current, base)
click to toggle source
Calls superclass method
Cyclical::Rule#potential_previous
# File lib/cyclical/rules/yearly_rule.rb, line 35 def potential_previous(current, base) candidate = super(current, base) return candidate if (base.year - candidate.year).to_i % @interval == 0 years = ((base.year - candidate.year).to_i % @interval) (candidate + (years - @interval).years).end_of_year end