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 |