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

Inherits:
OccurrenceIncrementer show all
Defined in:
lib/ri_cal/property_value/recurrence_rule/occurence_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 OccurrenceIncrementer

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

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from OccurrenceIncrementer

#add_outer_incrementer, #contains_daily_incrementer?, #contains_weeknum_incrementer?, #daily_incrementer?, #first_sub_occurrence, #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.



264
265
266
267
# File 'lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb', line 264

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

Instance Attribute Details

#intervalObject

:nodoc:



260
261
262
# File 'lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb', line 260

def interval
  @interval
end

#outer_occurrenceObject

:nodoc:



260
261
262
# File 'lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb', line 260

def outer_occurrence
  @outer_occurrence
end

#skip_incrementObject

:nodoc:



260
261
262
# File 'lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb', line 260

def skip_increment
  @skip_increment
end

Class Method Details

.conditional_incrementer(rrule, freq_str, sub_cycle_class) ⇒ Object



269
270
271
272
273
274
275
276
# File 'lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb', line 269

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



286
287
288
289
290
291
292
293
294
# File 'lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb', line 286

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



278
279
280
# File 'lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb', line 278

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



297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
# File 'lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb', line 297

def next_cycle(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



282
283
284
# File 'lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb', line 282

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