class Clavius::Calculation::DaysFrom

Attributes

number[R]
schedule[R]

Public Class Methods

new(schedule, number) click to toggle source
# File lib/clavius/calculation/days_from.rb, line 7
def initialize(schedule, number)
  @schedule = schedule
  @number   = Integer(number)

  fail ArgumentError, 'negative number' if @number.negative?
end

Public Instance Methods

after(origin) click to toggle source
# File lib/clavius/calculation/days_from.rb, line 18
def after(origin)
  calculated_day(:after, origin)
end
before(origin) click to toggle source
# File lib/clavius/calculation/days_from.rb, line 14
def before(origin)
  calculated_day(:before, origin)
end

Private Instance Methods

calculated_day(direction, origin) click to toggle source
# File lib/clavius/calculation/days_from.rb, line 29
def calculated_day(direction, origin)
  return zeroeth_day(direction, origin) if number.zero?

  schedule.public_send(direction, origin).take(number).to_a.last
end
zeroeth_day(direction, origin) click to toggle source
# File lib/clavius/calculation/days_from.rb, line 35
def zeroeth_day(direction, origin)
  self
    .class
    .new(schedule, 1)
    .public_send(direction, zeroeth_origin(direction, origin))
end
zeroeth_origin(direction, origin) click to toggle source
# File lib/clavius/calculation/days_from.rb, line 42
def zeroeth_origin(direction, origin)
  case direction
  when :before then origin.next_day
  when :after  then origin.prev_day
  end
end