Module: Duration

Defined in:
lib/doggy/duration.rb

Constant Summary collapse

DURATION_FORMAT =
/
  \A
  (?<days>\d+d)?
  (?<hours>\d+h)?
  (?<minutes>\d+m)?
  (?<seconds>\d+s)?
  \z
/x
DURATION_UNITS =
{
  's' => :seconds,
  'm' => :minutes,
  'h' => :hours,
  'd' => :days,
}

Class Method Summary collapse

Class Method Details

.parse(value) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/doggy/duration.rb', line 23

def self.parse(value)
  unless match = DURATION_FORMAT.match(value)
    raise ArgumentError, "not a duration: #{value.inspect}, "\
    "use digits followed by a unit (#{DURATION_UNITS.map { |k, v| "#{k} for #{v}" }.join(', ')})"
  end
  DURATION_UNITS.values.inject(0) do |sum, unit|
    sum + match[unit].to_i.public_send(unit)
  end.seconds
end