class Mhc::DateEnumerator::Base

Public Class Methods

new(start_date:, end_date:, interval: 1, wkst: 1) click to toggle source
# File lib/mhc/date_enumerator.rb, line 97
def initialize(start_date:, end_date:, interval: 1, wkst: 1)
  @start_date, @end_date, @interval, @wkst = start_date, end_date, interval, wkst
  @frame_manager = frame_manager.new(start_date, interval, wkst)
end

Public Instance Methods

each() { |date| ... } click to toggle source
# File lib/mhc/date_enumerator.rb, line 102
def each
  head, tail = range
  @frame_manager.forward_to(head).each do |frame|
    break if frame > tail
    date = occurrence_in_frame(frame)
    next unless date
    break if date > tail
    next  if date < head
    yield date
  end
end

Private Instance Methods

frame_manager() click to toggle source
# File lib/mhc/date_enumerator.rb, line 122
def frame_manager
  raise "should be defined in subclasses"
end
occurrence_in_frame(date) click to toggle source
# File lib/mhc/date_enumerator.rb, line 126
def occurrence_in_frame(date)
  raise "should be defined in subclasses"
end
range() click to toggle source
# File lib/mhc/date_enumerator.rb, line 116
def range
  s = (@range_from and @start_date < @range_from) ? @range_from : @start_date
  e = (@range_to   and @end_date   > @range_to)   ? @range_to   : @end_date
  return [s, e]
end