Module: Speedrun::Formatter

Defined in:
lib/speedrun/formatter.rb

Constant Summary collapse

SECONDS_PER_MINUTE =
60
SECONDS_PER_HOUR =
3600
BYTES_PER_KB =
1024
BYTES_PER_MB =
1024 * 1024
BYTES_PER_GB =
1024 * 1024 * 1024

Class Method Summary collapse

Class Method Details

.format_duration(seconds) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/speedrun/formatter.rb', line 24

def self.format_duration(seconds)
  if seconds < SECONDS_PER_MINUTE
    format('%.2fs', seconds)
  elsif seconds < SECONDS_PER_HOUR
    minutes = (seconds / SECONDS_PER_MINUTE).to_i
    secs = seconds % SECONDS_PER_MINUTE
    format('%dm %.1fs', minutes, secs)
  else
    hours = (seconds / SECONDS_PER_HOUR).to_i
    minutes = ((seconds % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE).to_i
    secs = seconds % SECONDS_PER_MINUTE
    format('%dh %dm %ds', hours, minutes, secs.to_i)
  end
end

.format_filesize(bytes) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/speedrun/formatter.rb', line 39

def self.format_filesize(bytes)
  if bytes < BYTES_PER_KB
    format('%d B', bytes)
  elsif bytes < BYTES_PER_MB
    format('%.1f KB', bytes / BYTES_PER_KB.to_f)
  elsif bytes < BYTES_PER_GB
    format('%.1f MB', bytes / BYTES_PER_MB.to_f)
  else
    format('%.1f GB', bytes / BYTES_PER_GB.to_f)
  end
end

.format_time(seconds) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/speedrun/formatter.rb', line 11

def self.format_time(seconds)
  hours = (seconds / SECONDS_PER_HOUR).to_i
  minutes = ((seconds % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE).to_i
  secs = seconds % SECONDS_PER_MINUTE

  format('%02d:%02d:%06.3f', hours, minutes, secs)
end

.parse_time(time_string) ⇒ Object



19
20
21
22
# File 'lib/speedrun/formatter.rb', line 19

def self.parse_time(time_string)
  hours, minutes, seconds = time_string.split(':').map(&:to_f)
  (hours * SECONDS_PER_HOUR) + (minutes * SECONDS_PER_MINUTE) + seconds
end