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

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