Module: AnimateIt::Units
- Defined in:
- lib/animate_it/units.rb
Constant Summary collapse
- TIME_STRING =
Time-string regex: accepts "1s", "1.5s", "300ms", "2m", "1m30s".
/\A(?:(\d+)m)?\s*(\d+(?:\.\d+)?)?\s*(s|ms)?\z/
Class Method Summary collapse
- .frames(value, fps:) ⇒ Object
-
.parse_time_string(str) ⇒ Object
Parses "1s", "1.5s", "300ms", "2m", "1m30s" into seconds (Float).
Class Method Details
.frames(value, fps:) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/animate_it/units.rb', line 8 def frames(value, fps:) case value when ActiveSupport::Duration (value.to_f * fps).round when FrameDuration, Numeric value.to_i when String seconds = parse_time_string(value) raise ArgumentError, "Cannot convert #{value.inspect} to frames" if seconds.nil? (seconds * fps).round when nil nil else raise ArgumentError, "Cannot convert #{value.inspect} to frames" end end |
.parse_time_string(str) ⇒ Object
Parses "1s", "1.5s", "300ms", "2m", "1m30s" into seconds (Float).
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/animate_it/units.rb', line 27 def parse_time_string(str) m = str.strip.match(TIME_STRING) return nil if m.nil? || (m[1].nil? && m[2].nil?) minutes = m[1].to_i number = m[2].to_f unit = m[3] || "s" base = unit == "ms" ? number / 1000.0 : number (minutes * 60) + base end |