Sha256: 6b0ce5e105c08df26f85db1fb52cf470c3ac882cda577f5bab7a1bb5cf24f0ef

Contents?: true

Size: 796 Bytes

Versions: 2

Compression:

Stored size: 796 Bytes

Contents

class DurationFormat
  SECONDS_PER_DAY = 86400
  SECONDS_PER_HOUR = 3600
  SECONDS_PER_MINUTE = 60
  PARTS = %i[day hour min sec].freeze
  PARTS_IN_SECONDS = {
    sec: 1,
    min: SECONDS_PER_MINUTE,
    hour: SECONDS_PER_HOUR,
    day: SECONDS_PER_DAY,
  }.freeze

  def self.build_parts(value)
    parts = {}
    remainder = value.to_f

    PARTS.each do |part|
      next if part == :sec
      part_in_seconds = PARTS_IN_SECONDS[part]
      parts[part] = remainder.div(part_in_seconds)
      remainder = (remainder % part_in_seconds).round(9)
    end

    parts[:sec] = remainder

    parts
  end

  def self.format(value)
    parts = build_parts(value)
    (parts[:day] > 0 ? "#{parts[:day]}day " : "") +
    sprintf('%02d:%02d:%02d', parts[:hour], parts[:min], parts[:sec].round)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
remain_timer-0.2.3 lib/duration_format.rb
remain_timer-0.2.2 lib/duration_format.rb