class Biz::Timeline::Abstract

Attributes

periods[R]

Public Class Methods

new(periods) click to toggle source
# File lib/biz/timeline/abstract.rb, line 7
def initialize(periods)
  @periods = periods.lazy
end

Public Instance Methods

for(duration) { |period| ... } click to toggle source
# File lib/biz/timeline/abstract.rb, line 23
def for(duration)
  return enum_for(:for, duration) unless block_given?

  remaining = duration

  periods
    .each do |period|
      if overflow?(period, remaining)
        remaining = Duration.new(0)

        yield period
      else
        scoped_period = period & duration_period(period, remaining)

        remaining -= scoped_period.duration

        yield scoped_period unless scoped_period.disjoint?

        break unless remaining.positive?
      end
    end
end
until(terminus) { |period| ... } click to toggle source
# File lib/biz/timeline/abstract.rb, line 11
def until(terminus)
  return enum_for(:until, terminus) unless block_given?

  periods
    .map { |period| period & comparison_period(period, terminus) }
    .each do |period|
      break if occurred?(period, terminus)

      yield period unless period.disjoint?
    end
end