Class: RiCal::PropertyValue::RecurrenceRule::OccurrenceIncrementer::FrequencyIncrementer

Inherits:
RiCal::PropertyValue::RecurrenceRule::OccurrenceIncrementer show all
Defined in:
lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb

Overview

A FrequenceIncrementer represents the xxxLY and FREQ parts of a recurrence rule A FrequenceIncrementer has a single occurrence within each cycle.

Instance Attribute Summary collapse

Attributes inherited from RiCal::PropertyValue::RecurrenceRule::OccurrenceIncrementer

#contains_daily_incrementer, #contains_weeknum_incrementer, #current_occurrence, #leaf_iterator, #outer_incrementers, #outer_range

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from RiCal::PropertyValue::RecurrenceRule::OccurrenceIncrementer

#add_outer_incrementer, #contains_daily_incrementer?, #contains_weeknum_incrementer?, #daily_incrementer?, #first_sub_occurrence, from_rrule, #in_outer_cycle?, #next_time, #outermost?, #short_name, #to_s, #update_cycle_range, #weeknum_incrementer?

Methods included from TimeManipulation

#advance_day, #advance_month, #advance_week, #advance_year, #first_day_of_month, #first_day_of_week, #first_day_of_year, #first_hour_of_day

Constructor Details

#initialize(rrule, sub_cycle_incrementer) ⇒ FrequencyIncrementer

Returns a new instance of FrequencyIncrementer.



13
14
15
16
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 13

def initialize(rrule, sub_cycle_incrementer)
  super(rrule, sub_cycle_incrementer)
  self.interval = rrule.interval
end

Instance Attribute Details

#intervalObject

:nodoc:



9
10
11
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 9

def interval
  @interval
end

#outer_occurrenceObject

:nodoc:



9
10
11
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 9

def outer_occurrence
  @outer_occurrence
end

#skip_incrementObject

:nodoc:



9
10
11
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 9

def skip_increment
  @skip_increment
end

Class Method Details

.conditional_incrementer(rrule, freq_str, sub_cycle_class) ⇒ Object



18
19
20
21
22
23
24
25
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 18

def self.conditional_incrementer(rrule, freq_str, sub_cycle_class)
  sub_cycle_incrementer = sub_cycle_class.for_rrule(rrule)
  if rrule.freq == freq_str
    new(rrule, sub_cycle_incrementer)
  else
    sub_cycle_incrementer
  end
end

Instance Method Details

#first_within_outer_cycle(previous_occurrence, outer_cycle_range) ⇒ Object



43
44
45
46
47
48
49
50
51
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 43

def first_within_outer_cycle(previous_occurrence, outer_cycle_range)
  if outer_range
    first_occurrence = outer_cycle_range.first
  else
    first_occurrence = step(previous_occurrence)
  end
  self.outer_range = outer_cycle_range
  sub_cycle_incrementer.first_within_outer_cycle(previous_occurrence, update_cycle_range(first_occurrence))
end

#multiplierObject



27
28
29
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 27

def multiplier
  1
end

#next_cycle(previous_occurrence) ⇒ Object

Advance to the next occurrence, if the result is within the current cycles of all outer incrementers



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 54

def next_cycle(previous_occurrence)
  @sub_cycle_dtstart = previous_occurrence
  if current_occurrence
    candidate = sub_cycle_incrementer.cycle_adjust(step(current_occurrence))
  else
    candidate = step(previous_occurrence)
  end
  if outermost?
    sub_occurrence = sub_cycle_incrementer.first_within_outer_cycle(previous_occurrence, update_cycle_range(candidate))
    until sub_occurrence
      candidate = sub_cycle_incrementer.cycle_adjust(step(candidate))
      sub_occurrence = sub_cycle_incrementer.first_within_outer_cycle(previous_occurrence, update_cycle_range(candidate))
    end
    sub_occurrence
  elsif in_outer_cycle?(candidate)
    sub_cycle_incrementer.first_within_outer_cycle(previous_occurrence, update_cycle_range(candidate))
  else
    nil
  end
end

#step(occurrence) ⇒ Object



31
32
33
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 31

def step(occurrence)
  occurrence.advance(advance_what => (interval * multiplier))
end

#sub_cycle_incrementerObject



35
36
37
38
39
40
41
# File 'lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb', line 35

def sub_cycle_incrementer
  if @sub_cycle_incrementer.unneeded?(current_occurrence || @previous_occurrence)
    NullSubCycleIncrementer
  else
    super
  end
end