Module: Timer::TimeParser

Defined in:
lib/timer/time_parser.rb

Class Method Summary collapse

Class Method Details

.parse_duration(duration) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/timer/time_parser.rb', line 3

def self.parse_duration(duration)
  return nil if duration.nil?

  total = 0
  hours = []
  mins = []
  secs = []

  # split only if we receive a string, ignore on arrays.
  if duration.respond_to?(:split)
    time_chunks = duration.split(" ")
  else
    time_chunks = duration
  end

  time_chunks.reject! { |c| c !~ /\d+(\.\d+)?[mhs]$/ }
  hours += time_chunks.select {|c| c[-1,1] == "h" }
  mins += time_chunks.select {|c| c[-1,1] == "m" }
  secs += time_chunks.select {|c| c[-1,1] == "s" }

  total += hours.inject(0) { |sum, x| sum + (x.to_f * 3600) }
  total += mins.inject(0) { |sum, x| sum + (x.to_f * 60) }
  total += secs.inject(0) { |sum, x| sum + x.to_f }

  # nil otherwise
  total unless total == 0
end