Module: Ace::Demo::Atoms::AsciinemaTapeCompiler

Defined in:
lib/ace/demo/atoms/asciinema_tape_compiler.rb

Class Method Summary collapse

Class Method Details

.compile(spec:, default_timeout: "2s") ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/ace/demo/atoms/asciinema_tape_compiler.rb', line 11

def compile(spec:, default_timeout: "2s")
  settings = spec["settings"] || {}
  lines = [
    "#!/usr/bin/env bash",
    "set -euo pipefail",
    ""
  ]

  env = settings["env"] || {}
  env.each do |key, value|
    lines << "export #{key}=#{Shellwords.escape(value.to_s)}"
  end
  lines << "" unless env.empty?

  spec.fetch("scenes", []).each do |scene|
    scene_name = scene["name"]
    lines << "# Scene: #{scene_name}" unless scene_name.to_s.strip.empty?

    scene.fetch("commands", []).each do |command|
      lines << command.fetch("type")
      sleep_value = validate_sleep!(command["sleep"] || default_timeout)
      lines << "sleep #{sleep_value}"
      lines << ""
    end
  end

  lines.join("\n").rstrip + "\n"
end