Class: Hiccup::Enumerable::WeeklyEnumerator

Inherits:
ScheduleEnumerator show all
Defined in:
lib/hiccup/enumerable/weekly_enumerator.rb

Instance Attribute Summary

Attributes inherited from ScheduleEnumerator

#schedule

Instance Method Summary collapse

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