module RSpecTracer::TimeFormatter

Constants

DEFAULT_PRECISION
SECONDS_PRECISION
UNITS

Public Instance Methods

format_duration(duration) click to toggle source
# File lib/rspec_tracer/time_formatter.rb, line 33
def format_duration(duration)
  return 0 if duration.negative?

  precision = duration < 1 ? SECONDS_PRECISION : DEFAULT_PRECISION

  strip_trailing_zeroes(format("%<duration>0.#{precision}f", duration: duration))
end
format_time(seconds) click to toggle source
# File lib/rspec_tracer/time_formatter.rb, line 17
def format_time(seconds)
  return pluralize(format_duration(seconds), 'second') if seconds < 60

  formatted_duration = UNITS.each_pair.with_object([]) do |(unit, count), duration|
    next unless seconds.positive?

    seconds, remainder = seconds.divmod(count)

    next if remainder.zero?

    duration << pluralize(format_duration(remainder), unit)
  end

  formatted_duration.reverse.join(' ')
end
pluralize(duration, unit) click to toggle source
# File lib/rspec_tracer/time_formatter.rb, line 45
def pluralize(duration, unit)
  if (duration.to_f - 1).abs < Float::EPSILON
    "#{duration} #{unit}"
  else
    "#{duration} #{unit}s"
  end
end
strip_trailing_zeroes(formatted_duration) click to toggle source
# File lib/rspec_tracer/time_formatter.rb, line 41
def strip_trailing_zeroes(formatted_duration)
  formatted_duration.sub(/(?:(\..*[^0])0+|\.0+)$/, '\1')
end