Class: Hiccup::Enumerable::WeeklyEnumerator
- Inherits:
-
ScheduleEnumerator
- Object
- ScheduleEnumerator
- Hiccup::Enumerable::WeeklyEnumerator
- Defined in:
- lib/hiccup/enumerable/weekly_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) ⇒ WeeklyEnumerator
constructor
A new instance of WeeklyEnumerator.
Methods inherited from ScheduleEnumerator
#next, #next_occurrence_after, #next_occurrence_before, #prev
Constructor Details
#initialize(*args) ⇒ WeeklyEnumerator
Returns a new instance of WeeklyEnumerator.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/hiccup/enumerable/weekly_enumerator.rb', line 8 def initialize(*args) super # Use more efficient iterator methods if # weekly_pattern is simple enough if weekly_pattern.length == 1 def self.next_occurrence_after(date) date + skip * 7 end def self.next_occurrence_before(date) date - skip * 7 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 38 39 40 41 |
# File 'lib/hiccup/enumerable/weekly_enumerator.rb', line 26 def first_occurrence_on_or_after(date) result = nil wday = date.wday weekly_pattern.each do |weekday| wd = Date::DAYNAMES.index(weekday) wd = wd + 7 if wd < wday days_in_the_future = wd - wday temp = date + days_in_the_future remainder = ((temp - start_date) / 7).to_i % skip temp += (skip - remainder) * 7 if remainder > 0 result = temp if !result || (temp < result) end result end |
#first_occurrence_on_or_before(date) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/hiccup/enumerable/weekly_enumerator.rb', line 43 def first_occurrence_on_or_before(date) result = nil wday = date.wday weekly_pattern.each do |weekday| wd = Date::DAYNAMES.index(weekday) wd = wd - 7 if wd > wday days_in_the_past = wday - wd temp = date - days_in_the_past remainder = ((temp - start_date) / 7).to_i % skip temp -= remainder * 7 if remainder > 0 result = temp if !result || (temp > result) end result end |