Sha256: 1abdcf85559dfc630caff1815a9cd1d451964753ad97b955da43908f33971b7d
Contents?: true
Size: 1.48 KB
Versions: 6
Compression:
Stored size: 1.48 KB
Contents
require 'hiccup/enumerable/schedule_enumerator' module Hiccup module Enumerable class AnnuallyEnumerator < ScheduleEnumerator def initialize(*args) super # Use more efficient iterator methods unless # we have to care about leap years unless start_date.month == 2 && start_date.day == 29 def self.next_occurrence_after(date) date.next_year(skip) end def self.next_occurrence_before(date) date.prev_year(skip) end end end def first_occurrence_on_or_after(date) year, month, day = date.year, start_date.month, start_date.day day = -1 if month == 2 && day == 29 result = Date.new(year, month, day) year += 1 if result < date remainder = (year - start_date.year) % skip year += (skip - remainder) if remainder > 0 Date.new(year, month, day) end def first_occurrence_on_or_before(date) year, month, day = date.year, start_date.month, start_date.day day = -1 if month == 2 && day == 29 result = Date.new(year, month, day) year -= 1 if result > date # what if year is before start_date.year? remainder = (year - start_date.year) % skip year -= remainder if remainder > 0 Date.new(year, month, day) end end end end
Version data entries
6 entries across 6 versions & 1 rubygems