class Numeric

Public Instance Methods

duration(concise: false) click to toggle source
# File lib/duration-human.rb, line 2
def duration(concise: false)
  
  if self.infinite?
    return (concise ? 8734.chr(Encoding::UTF_8) : "an infinitely long time")
  end

  begin
    seconds  = self.to_int
  rescue FloatDomainError
    return ""
  end

  minutes  = seconds / 60
  hours = minutes / 60
  days  = hours / 24

  if hours >= 48
    concise ? "#{days}d #{hours % 24}h" : "#{days} days and #{hours % 24} hours"
  elsif minutes >= 120
    concise ? "#{hours}h #{minutes % 60}m" : "#{hours} hours and #{minutes % 60} minutes"
  elsif seconds >= 120
    concise ? "#{minutes}m #{seconds % 60}s" : "#{minutes} minutes and #{seconds % 60} seconds"
  elsif seconds >= 0
    concise ? "#{seconds}s" : "#{seconds} seconds"
  else
    (concise ? "-" : "minus " ) + seconds.abs.duration(concise: concise)
  end
end