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