class MudratProjector::DateDiff::ComplexCalculator

Attributes

first_unit[RW]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/mudrat_projector/date_diff.rb, line 67
def initialize *args
  super
  @first_unit = fetch_unit from
  @last_unit  = fetch_unit to
end

Public Instance Methods

calculate() click to toggle source
# File lib/mudrat_projector/date_diff.rb, line 73
def calculate
  if first_unit.begin == last_unit.begin
    days_between / days_in_unit(first_unit)
  else
    calculate_unit(from, first_unit.end) +
      units_between +
      calculate_unit(last_unit.begin, to)
  end
end

Private Instance Methods

calculate_unit(unit_begin, unit_end) click to toggle source
# File lib/mudrat_projector/date_diff.rb, line 85
def calculate_unit unit_begin, unit_end
  self.class.new(unit_begin, unit_end).calculate
end
calculate_units_between(start, finish) click to toggle source
# File lib/mudrat_projector/date_diff.rb, line 89
def calculate_units_between start, finish
  count = 1
  until start == finish
    count += 1
    start = advance_one_unit start
  end
  count
end
days_in_unit(unit) click to toggle source
# File lib/mudrat_projector/date_diff.rb, line 98
def days_in_unit unit
  to_big_decimal((unit.end + 1) - unit.begin)
end
units_between() click to toggle source
# File lib/mudrat_projector/date_diff.rb, line 102
def units_between
  start = first_unit.end + 1
  finish = rewind_one_unit last_unit.begin
  return 0 if start > finish
  calculate_units_between start, finish
end