Class: Hiccup::Enumerable::AnnuallyEnumerator
- Inherits:
-
ScheduleEnumerator
- Object
- ScheduleEnumerator
- Hiccup::Enumerable::AnnuallyEnumerator
- Defined in:
- lib/hiccup/enumerable/annually_enumerator.rb
Instance Attribute Summary
Attributes inherited from ScheduleEnumerator
Instance Method Summary collapse
- #first_occurrence_on_or_after(date) ⇒ Object
- #first_occurrence_on_or_before(date) ⇒ Object
-
#initialize(*args) ⇒ AnnuallyEnumerator
constructor
A new instance of AnnuallyEnumerator.
Methods inherited from ScheduleEnumerator
#next, #next_occurrence_after, #next_occurrence_before, #prev
Constructor Details
#initialize(*args) ⇒ AnnuallyEnumerator
Returns a new instance of AnnuallyEnumerator.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/hiccup/enumerable/annually_enumerator.rb', line 8 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 |
Instance Method Details
#first_occurrence_on_or_after(date) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/hiccup/enumerable/annually_enumerator.rb', line 26 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 |
#first_occurrence_on_or_before(date) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/hiccup/enumerable/annually_enumerator.rb', line 39 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 |